map用法
参考博客:https://www.cnblogs.com/empty16/p/6395813.html
在这里仅对原笔主的博客做一点小补充;
一、Map 简介
Map是STL的一个容器,它提供一对一的hash。
- 第一个可以称为关键字(key),每个关键字只能在map中出现一次,
- 第二个可能称为该关键字的值(value)
Map以模板(泛型)方式实现,可以储存任意类型的变数,包括使用者自定义的资料型态。Map主要用于资料一对一映射(one-to-one)的情况,map内部的实现自建一颗红黑树,这颗树具有对数据自动排序的功能。比如一个班级中,每个学生的学号跟他的姓名就存在着一对一映射的关系。
二、成员函式概观与常用程式写法
1. 变量声明
map<string, string> mapStudent;
2. 插入元素
//用insert函數插入pair mapStudent.insert(pair<string, string>("r000", "student_zero")); //用"array"方式插入 mapStudent["r123"] = "student_first"; mapStudent["r456"] = "student_second";
3. 查找
出现时,它返回资料所在位置,如果没有,返回iter与end函数返回相同
iter = mapStudent.find("r123"); if(iter != mapStudent.end()) cout<<"Find, the value is"<<iter->second<<endl; else cout<<"Do not Find"<<endl;
4. 删除&清空
清空map中的数据可以用clear()函数,判定map中是否有数据可以用empty()函数,它返回true则说明是空map,而资料的删除要用到erase函数,它有三个overload的函数。
//迭代器刪除 iter = mapStudent.find("r123"); mapStudent.erase(iter); //用关键字刪除 int n = mapStudent.erase("r123");//如果刪除了会返回1,否则返回0 //用迭代器范围刪除 : 把整个map清空 mapStudent.erase(mapStudent.begin(), mapStudent.end());
//用删除函数
mapStudent.clear();
5.元素遍历
//迭代器遍历 for(map<string, string>::iterator iter = mapStudent.begin(); iter<mapStudent.end(); iter++); //C++11特性 for(auto iter:mapStudent);
6.其他常用基本函数
swap() //交换两个map count() //返回所查找元素个数 empty() //若容器为空返回true size() //返回容器元素个数 rbegin() //逆向迭代器,返回容器尾部 rend() //逆向迭代器,返回容器头部