1.基本概念
map中存放的每一个元素是一个pair对组,第一个元素是key,第二个元素是value。map中的元素不允许重复,但是multimap元素可重复
2.创建
#include <iostream> #include <map> #include <string> using namespace std; int main() { //创建一个map map<int, int> m; m.insert(pair<int, int>(1, 10)); m.insert(pair<int, int>(2, 20)); //map中的元素会根据key排序 for (map<int, int>::iterator it = m.begin(); it != m.end(); it++) { cout<<it->first<<it->second; } }
3.基本操作
1,大小和交换
#include <iostream> #include <map> #include <string> using namespace std; int main() { map<int, int> m; m.insert(pair<int, int>(1, 10)); m.insert(pair<int, int>(2, 20)); if (!m.empty()) {//是否为空 cout << m.size();//2 } map<int, int> m2; m2.insert(pair<int, int>(3, 30)); m2.insert(pair<int, int>(4, 40)); m2.swap(m); for (map<int, int>::iterator it = m2.begin(); it != m2.end(); it++) { cout << it->first << "="<<it->second<<endl;//1=10 2=20 } }
2,插入和删除
#include <iostream> #include <map> #include <string> using namespace std; int main() { map<int, int> m; //插入 //第一种 m.insert(pair<int, int>(1, 10)); //第二种 m.insert(make_pair(2,20)); //第三种 m.insert(map<int, int>::value_type(3,30)); //第四种 m[4] = 40; //按照key删除 m.erase(2); //清空 m.clear(); }
3.查找和统计
#include <iostream> #include <map> #include <string> using namespace std; int main() { map<int, int> m; m.insert(pair<int, int>(1, 10)); m.insert(pair<int, int>(2, 30)); map<int,int>::iterator it= m.find(2); if (it !=m.end()) { cout << "找到元素"; //map不允许插入重复的元素,结果只有0和1,但是multimap可能大于1 int num = m.count(2); cout << num; } }
5.map容器自定义排序规则
默认是按照key排序,如何自定义排序规则,通过仿函数实现。代码如下
#include <iostream> #include <map> #include <string> using namespace std; //自定义仿函数 class myCompare { public: bool operator()(int a, int b)const { return a > b;//降序排序 } }; int main() { map<int, int,myCompare> m;//第三个参数可以传入自己定义的规则 m.insert(pair<int, int>(1, 10)); m.insert(pair<int, int>(2, 30)); for (map<int, int, myCompare>::iterator it = m.begin(); it != m.end(); it++) { cout << it->first; cout << it->second; } }
如果是自定义数据类型,仿函数传入两个自定义数据类型即可