1、基本概念
map和set一样,也是一种关联容器,内部也是使用红黑树作为底层的实现结构。但是不同的是,map的键值和实值可以是不一样的。
2、查找操作
map与set的查找操作本质上是一样的,没有特殊的地方。
3、插入操作
map使用键值排列元素的位置,因而也不允许插入相同键值的元素,插入算法返回pair(iterator,bool),分别指明插入的节点和插入结果。
4、删除操作
map与set的删除操作也是一样的,都是使用红黑树的算法。
5、修改算法
不同于set,map的实值与键值是分离的,因而修改实值的操作是允许的,但是键值是不允许修改的。
6、综合结果
下面对map的基本用法进行简单的测试,代码如下:
map<int,string> a;
a[1] = "a";
a[5] = "b";
a[7] = "c";
pair<int,string> value(3,"d");
a.insert(value);
for (map<int,string>::iterator iter = a.begin();iter !=a.end();++iter)
{
cout<<iter->first<<" "<<(iter->second).c_str()<<endl;
/*1 a 3 d 5 b 7 c */
}
map<int,string>::iterator iter = a.find(8);
if (iter == a.end())
{
cout<<"key 8 not find the value"<<endl;
}
iter = a.find(3);
if (iter != a.end())
{
cout<<"key 3 find the value:"<<iter->second.c_str()<<endl;
}
//iter->first = 9; 不可更改
iter->second = "e";
cout<<iter->second.c_str()<<endl; //e
pair<int,string> temp(7,"f");
pair<map<int,string>::iterator,bool> r = a.insert(temp);
cout<<r.second<<endl; //0,不可插入相同键值的元素
a.erase(7);
for (map<int,string>::iterator iter = a.begin();iter !=a.end();++iter)
{
cout<<iter->first<<" "<<(iter->second).c_str()<<endl;
/*1 a 3 e 5 b */
}
7、性能分析
map与set只是满足不同的需求,但是实现原理是一致的,因而性能方面也是一致的。