map:关联容器,提供一对一(第一个为关键字,第二个为关键字的值,关键字只能出现一次)的数据处理能力。关键字:key,对应的值:value;key值唯一。
map内部自建一颗红黑树,具有对数据自动排序的功能,所以在map内部所有的数据都是有序的。
头文件:
#include <map>
map构造函数:
map<int, string> mapString;
map数据插入:
第一种:用insert函数插入数据
mapString.insert(pair<int, string>(1, "hello"));
mapString.insert(pair<int, string>(2, "world"));
第二种:insert函数配合value_type
mapString.insert(map<int ,string>::value_type(3, "c++"));
mapString.insert(map<int, string>::value_type(4, "learning"));
第三种:数组的方式插入
mapString[5] = "true";
mapString[6] = "false";
第一种方式与第二种方式插入重复key值数据时,是无法插入的,第三种方式插入重复key值数据会将原来的数据覆盖掉。
mapString.size() //计算map的大小
mapString.clear(); //情况map内容
mapString.empty(); //判断容器是否为空
mapString.swap(); //交换容器内容
map<int, string> mapString;
map<int, string> test;
mapString[1] = "true";
mapString[2] = "false";
test[1] = "hello";
test[2] = "world";
test[3] = "test";
test.swap(mapString);
结果:test容器与mapString容器的内容会发生交换
打印mapString内容:
1:hello
2:world
3:test
map遍历:
map<int, string>::iterator iter;
for(iter = mapString.begin(); iter != mapString.end(); ++iter)
{
cout<<iter->first<<"=>"<<iter->second<<endl;
}
输出:
[root@localhost workplace]# ./test
1=>hello
2=>world
反向迭代器输出:
map<int, string>::reverse_iterator iter;
for(iter = mapString.rbegin(); iter != mapString.rend(); ++iter)
{
cout<<iter->first<<"=>"<<iter->second<<endl;
}
结果:
[root@localhost workplace]# ./test
2=>world
1=>hello
map中find用法:根据key查找容器中是否存在
map<int, string>::iterator iter = mapString.find(1);
if(iter != mapString.end())
{
cout<<iter->second<<endl;
}
map中erase用法:删除map中的数据
void erase (iterator position); //erasing by iterator
map<int, string>::iterator iter = mapString.find(1);
mapString.erase(iter);
size_type erase (const key_type& k);// erasing by key
mapString.erase(3);
void erase (iterator first, iterator last); // erasing by range
iter = mapString.find(4);
mapString.erase(iter, mapString.end());
参考:
https://www.cnblogs.com/fnlingnzb-learner/p/5833051.htm
http://www.cplusplus.com/reference/map/map/