map容器的基本操作
map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处。STL的map底层是用红黑树实现的,查找时间复杂度是log(n);
1.插入元素(四种):
首先肯定要 #include<map>, 然后又定义一个
map<int,string> m;
pair<map<int,string>::iterator,bool> pair_1
(1) pair1 = m.insert(pair<int,string>(1,"OC1")); //保存insert()的返回值
(2) m.insert(make_pair(2,"OC2")); //插入失败,不会产生覆盖
(3) m.insert(map<int,string>::value_type(3,"OC3"));
(4) m[4] = "OC4" //假如key的值与m[ ? ]中的值相同,则改变其string
**遍历方法(2种):
1.
for (map<int,string>::iterator it = m.begin();it!=m.end();it++)
{
cout<<(*it).first<<endl;
cout<<(*it).second<<endl;
}
2.
while (!m.empty())
{
map<int,string>::iterator it = m.begin();
cout<<it->first<<"\t"<<it->second<<endl;
m.erase(it);
}
2.删除元素:
(1)指定元素删除:
map<int, int>::iterator it = m.begin();
for ( ; it != m.end();)
{
if (it->second == 1)
it = m.erase(it);//or m.erase(it++);
else
++it;
}
(2)查找出map中的value,而删除其key
map<int, string>::iterator it;
it = m.find(1);
m.erase(it);
(3)全删map:
m.earse(m.begin(),m.end())
emmmmmm,当然清空map也可以用 clear() ;
3.元素查找:
一般都是需要遍历
it = m.find(1);
if(it != m.end())
{
Cout<<”找到了”<<it->second<<endl;
it++;
}
else
{
Cout<<”没有找到”<<endl;
it++;
}
4.map的大小:
int s = m.size()