1. 头文件 < map >
2. map是什么
2.1 原理
- std::map是有序键值对容器,它的元素的键是唯一的
- 实现方式通常为红黑树
- 用比较函数Compare排序键
2.2 复杂度
- 插入: O(logn)
- 删除: O(logn)
- 查找: O(logn)
3. 常用函数
3.1 元素访问
元素访问 | 作用 |
---|
operator[] | 访问或插入指定的元素 |
map<string, int> m;
m = {{"aaa", 1}, {"bbb", 2}, {"ccc", 3}};
cout<<m["aaa"]<<endl;
m["aaa"] = 4;
m["ddd"] = 5;
for(auto &pair : m)
{
cout<<pair.first<<" : "<<pair.second<<endl;
}
3.2 迭代器
迭代器 | 作用 |
---|
begin | 返回指向容器第一个元素的迭代器 |
end | 返回指向容器尾端的迭代器 |
rbegin | 返回指向容器最后元素的逆向迭代器 |
rend | 返回指向前端的逆向迭代器 |
map<string, int> m2 = m;
map<string, int>::iterator iter;
map<string, int>::reverse_iterator riter;
for(iter=m2.begin(); iter!=m2.end(); iter++){
cout<<iter->first<<" : "<<iter->second<<endl;
}
for(riter=m2.rbegin(); riter!=m2.rend(); riter++){
cout<<riter->first<<" : "<<riter->second<<endl;
}
3.3 容量函数
容量函数 | 作用 |
---|
empty | 检查容器是否为空 |
size | 返回容纳的元素数 |
max_size | 返回可容纳的最大元素数 |
cout<<m2.empty()<<endl;
cout<<m2.size()<<endl;
cout<<m2.max_size()<<endl;
3.4 修改函数
m2["ddd"] = 5;
m2["aaa"] = 10;
for(auto &pair : m2){
cout<<pair.first<<" : "<<pair.second<<endl;
}
m2.erase("ddd");
for(auto &pair : m2){
cout<<pair.first<<" : "<<pair.second<<endl;
}
3.5 查找函数
查找 | 作用 |
---|
count | 返回匹配特定键的元素数量 |
find | 寻找带有特定键的元素 |
cout<<m2.count("aaa")<<endl;
map<string, int>::iterator sear;
sear = m2.find("aaa");
if(sear != m2.end()){
cout<< "Found. "<< sear->first<<" : "<< sear->second<<endl;
}else{
cout<<"Not found."<<endl;
}
4.常用示例
4.1 单词计数器
list<string> word = {"hello", "world", "c", "hello", "c++",
"world", "hello", "hello"};
map<string, size_t> word_map;
for(auto &n : word){
++word_map[n];
}
for(auto &pair : word_map){
cout<<pair.first<<" : "<<pair.second<<endl;
}