map头文件
简介:
- map中所有的元素都是pair对
- pair中第一个元素是key(键值),起到索引的作用,第二个元素是value(实值)
- 所有的元素都会根据元素的键值自动排序
本质:
- map/multimap属于关联式容器,底层结构是用二叉树实现的
优点:
- 可以根据key值快速找到value值
map和multimap的区别:
- map不允许容器中有重复的key值元素
- multimap允许容器中有重复的key值元素
PS:接下来我会从(map的构造和赋值)、(map的大小交换)、(map插入和删除)、(map的查找和统计)、(map容器排序)等方面来介绍map容器,每个案例都会有代码和图片说明~
display函数源码:
void display(map<int, int>mp) { for (map<int, int>::iterator it = mp.begin(); it != mp.end(); it++) { cout << "key值:" << it->first << "value值:" << it->second << endl; } cout << endl; } 复制代码
map的构造和赋值
- 构造
- 1.map<T1,T2>mp;map的默认构造函数
- 2.map(const map &mp);map的拷贝构造函数
- 赋值
- =号赋值
代码如下:
//map的构造和赋值 //map的构造和赋值 void test01() { //默认构造函数 map<int, int>mp; //给mp插数 mp.insert(pair<int, int>(1, 23)); mp.insert(pair<int, int>(66, 45)); mp.insert(pair<int, int>(10, 63)); mp.insert(pair<int, int>(52, 37)); mp.insert(pair<int, int>(52, 38));//这个不会存进去 mp.insert(pair<int, int>(100, 520)); //打印输出 display(mp); //拷贝构造函数 map<int, int>mp2(mp); display(mp2); //赋值 map<int, int>mp3 = mp2; display(mp3); } 复制代码
结果:
网络异常,图片无法展示
|
map的大小和交换
- size();返回容器中元素的数目
- empty();判断容器是否为空
- swap();交换两个容器
代码如下:
//map的大小和交换 void test02() { //默认构造函数 map<int, int>mp; //给mp插数 mp.insert(pair<int, int>(1, 23)); mp.insert(pair<int, int>(66, 45)); mp.insert(pair<int, int>(10, 63)); mp.insert(pair<int, int>(52, 37)); mp.insert(pair<int, int>(52, 38));//这个不会存进去 mp.insert(pair<int, int>(100, 520)); //打印输出 display(mp); //map是否为空 if (mp.empty()) { cout << "mp为空!" << endl; } else { cout << "mp不为空!" << endl; cout << "mp容器的大小:" << mp.size() << endl; } map<int, int>mp2; mp2.insert(pair<int, int>(10, 90)); mp2.insert(pair<int, int>(1, 77)); mp2.insert(pair<int, int>(66, 15)); mp2.insert(pair<int, int>(50, 67)); mp2.insert(pair<int, int>(20, 9)); mp2.insert(pair<int, int>(100, 666)); //交换 cout << "交换后:" << endl; mp.swap(mp2); display(mp); } 复制代码
结果:
网络异常,图片无法展示
|
map的插入和删除
- insert(elem);在容器中插入元素
- clear();清空所有元素
- erase(pos);删除pos迭代器所指的元素,返回下一个元素的迭代器
- erase(beg,end);删除区间[beg,end)的所有元素,返回下一个元素的迭代器
- erase(key);删除容器中值为key的元素
代码如下:
//map的插入和删除 void test03() { //插入(四种插入) map<int, int>mp; //第一种 mp.insert(pair<int, int>(10, 520)); //第二种 mp.insert(make_pair(21, 666)); //第三种 mp.insert(map<int, int>::value_type(1, 999)); //第四种 mp[16] = 1314; display(mp); //删除 mp.erase(mp.begin()); display(mp); mp.erase(21); display(mp); //清空 mp.clear(); //或者 //mp.erase(mp.begin(), mp.end()); display(mp); } 复制代码
结果:
网络异常,图片无法展示
|
map查找和统计
- find(key);查找key是否存在,返回该键的元素的迭代器;若不在,返回map.end();
- count(key);统计key的元素个数(0或1)
代码如下:
//map查找的统计 void test04() { //默认构造函数 map<int, int>mp; //给mp插数 mp.insert(pair<int, int>(1, 23)); mp.insert(pair<int, int>(66, 45)); mp.insert(pair<int, int>(10, 63)); mp.insert(pair<int, int>(52, 37)); mp.insert(pair<int, int>(52, 38));//这个不会存进去 mp.insert(pair<int, int>(100, 520)); //打印输出 display(mp); //查找(创建一个迭代器来找key值) map<int, int>::iterator f = mp.find(66); if (f != mp.end()) { cout << "找到该元素!" << endl; cout << "key:" << f->first << " value:" << f->second << endl; } else { cout << "没找到!" << endl; } //统计(在map中的统计要么是0要么是1) int cnt1 = mp.count(66); int cnt2 = mp.count(60); cout << "key=66的个数:" << cnt1 << endl; cout << "key=60的个数:" << cnt2 << endl; } 复制代码
结果:
网络异常,图片无法展示
|
map排序
- 利用仿函数,改变排序规则
仿函数代码:
//仿函数 class Compare { public: bool operator()(int a, int b)const { return a > b; } }; 复制代码
PS:一定要加上const,这是VS2022的需求
测试代码:
//map排序 void test05() { //默认构造函数 map<int, int>mp; //给mp插数 mp.insert(pair<int, int>(1, 23)); mp.insert(pair<int, int>(66, 45)); mp.insert(pair<int, int>(10, 63)); mp.insert(pair<int, int>(52, 37)); mp.insert(pair<int, int>(52, 38));//这个不会存进去 mp.insert(pair<int, int>(100, 520)); //打印输出 display(mp); //更改规则的map map<int, int, Compare>mp2; mp2.insert(make_pair(1, 23)); mp2.insert(make_pair(66, 45)); mp2.insert(make_pair(10, 63)); mp2.insert(make_pair(52, 37)); mp2.insert(make_pair(52, 38));//这个数不会被插入 mp2.insert(make_pair(100, 520)); //打印输出 for (map<int, int, Compare>::iterator it1 = mp2.begin(); it1 != mp2.end(); it1++) { cout << "key值:" << it1->first << " " << "value值:" << it1->second << endl; } } 复制代码
结果:
网络异常,图片无法展示
|
作者:白凤倚剑归
链接:https://juejin.cn/post/7109498605408354318
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。