map函数
是STL中一个挺实用的,尤其是统计某个字符数量,Python 的字典 dict 就是在这个基础上发展来的。
1、map 函数简介:
map 函数是一种键值对的容器,以键值对方式存在。
下面介绍 常见的增删改查四种方式:
3、初始化map:
#include<iostream> #include<map> using namespace std; int main(){ map<char, int> dict={ {'a', 1}, {'b', 2}, {'c', 3}, }; // 初始化一个字典,键是 char 类型,值是 int 类型 return 1; }
void loop_print(map<char, int>& dict){ // 遍历map字典 map<char, int>::iterator item; item = dict.begin(); while(item != dict.end()){ cout<<item->first<<":"<<item->second<<endl; item ++; } }
2、增 插入成员
通过 dict.insert()
插入成员,但是仅可以插入不存在的 key ,若存在则插入失败。
#include<iostream> #include<map> //#include<iterator> using namespace std; int main(){ map<char, int> dict={ {'a', 1}, {'b', 2}, {'c', 3}, }; // 1、插入数据 如果已经存在,则修改内容,如果没有则添加内容。 dict['d'] = 4; // 2、插入单个值 dict.insert(std::pair<char, int>('1', 1)); dict.insert(std::pair<char, int>('2', 2)); // 3、插入指定位置 map<char, int>::iterator index; index = dict.begin(); dict.insert(index, std::pair<char, int>('3', 3)); // 4、插入多个值 列表形式 从c++11开始支持 dict.insert({{'4', 4}, {'5', 5}}); // 遍历数据,打印 while(index != dict.end()){ cout<<index->first<<":"<<index->second<<endl; index ++; } // 插入单个键值对,并返回插入位置和成功标志,插入位置已经存在值时,插入失败 // pair<iterator,bool> insert (const value_type& val); return 1; } // 打印 /* 1:1 2:2 3:3 4:4 5:5 a:1 b:2 c:3 d:4 */
3、删除成员
有两种删除成员方法,一种是通过键删除dict.erase('key')
,另一种是通过迭代器iterator
,
void delete_member(map<char, int> &dict){ // 1.根据key删除,返回删除的数量,要么是0要么是1; dict.erase('a'); // 2.通过迭代器删除一定范围内的成员 map<char, int>::iterator item=dict.begin(); dict.erase(item); // 删除一位 删除:b ++item; dict.erase(item, ++item); // 删除区间内的成员,前闭后开 这里面是删除:c //3.清空map内的所有内容 //dict.clear(); } int main(){ // 2、删除成员 delete_member(dict); loop_print(dict); return 1; } //打印 d:4 e:5
4、修改成员内容
也是两种方法,一种是通过重载的 [] 修改内容,类似 Python 字典。另一种是通过迭代器 iterator ,迭代的过程中修改 value 。具体用法请看下方代码样例。
void update_member(map<char, int>&dict){ // 1、通过键修改 dict['a'] = 666; // 2、通过迭代器修改内容 map<char, int>::iterator item=dict.begin(); int tmp; // 存放key的值 while(item != dict.end()){ if(item->first == 'b'){ // 只修改key:b的值为888 tmp = item->second; item->second = tmp + 886; } item++; // 迭代到下一个 } } int main(){ // 3、修改内容 update_member(dict); loop_print(dict); return 1; } //打印 a:666 b:888 c:3 d:4 e:5
5、查找
通过 map.find("key")
查找键,返回的是该关键字的迭代器。若没找到元素则返回指向 end 的迭代器
void find_member(map<char, int>&dict){ // 1、若没找到关键字 a ,则返回指向end的迭代器 map<char, int>::iterator res = dict.find('a'); if(res!=dict.end()){ // 判断是否找到 'a' cout<<res->first<<":"<<res->second; } // 2、或者使用count,查找是否含有key a,要么0要么1 int number = dict.count('a'); cout<<"a:"<<number<<endl; } int main(){ // 4、查找 find_member(dict); return 1; } //打印 a:1 a:1
6、容量查询
void query_map(map<char, int>&dict){ // 查询map中的键值对的个数 int map_size = dict.size(); cout<<"map_size:"<<map_size<<endl; // 查询map是否为空 dict.empty(); }
总结:
Just do it!
参考链接:
https://blog.csdn.net/shuzfan/article/details/53115922