C++中不得不说的map容器
目录
- 前言
- 1,map基本概念
- 2,map构造和赋值
- 3,大小和交换
- 4,插入和删除
- 5,查找和统计
- 6,排序
- 总结
前言
为什么这两天在研究C++的容器呢,因为刷题的时候碰见了几个不擅长的题,得用STL中的几种容器才能解出来,所以也是动力满满呀,希望能尽快转过头去把那几个题给写出来,哈哈哈,当然,解题思路和过程后续我也会分享出来。话不多说,老规矩,
使用map容器要包含头文件#include<map>
1,map基本概念
简介:
map中所有元素都是pair(成对出现的数)
pair中第一个元素为key(键值),起到索引的作用,第二个元素为value(实值)
所有的元素都会根据元素的键值自动排序
本质:
map/multimap属于关联式容器,底层结构是用二叉树实现的
优点:
可以根据key值快速找到value值
map和multimap的区别:
map不允许容器中有重复的key值元素
multimap允许容器中有重复的key值元素
2,map构造和赋值
功能描述:
对map容器进行构造和赋值操作
代码实现:
#include<iostream> #include<map> using namespace std; void printMap(map<int, int>& m) { for (map<int, int>::iterator it = m.begin(); it != m.end(); it++) { cout << "key=" << (*it).first << " value=" << (*it).second << endl; } cout << endl; } void test01() { //创建map容器 1,默认构造 map<int, int>m; //要写两个数据类型 m.insert(pair<int, int>(1, 10)); m.insert(pair<int, int>(3, 30)); //与插入的顺序无关 m.insert(pair<int, int>(2, 20)); //容器会根据key值进行自动排序 m.insert(pair<int, int>(4, 40)); printMap(m); //2,拷贝构造 map<int, int>m2(m); printMap(m2); //3,赋值 map<int, int>m3; m3 = m2; //等号方式赋值 printMap(m3); } int main() { test01(); return 0; }
3,大小和交换
功能描述:
统计map容器大小以及交换map容器
函数原型:
size(); //返回容器中元素的个数
empty(); //bool类型,判断容器是否为空
swap(st); //交换两个集合容器
4,插入和删除
功能描述:
map容器进行插入和删除数据
代码实现:
#include<iostream> #include<map> using namespace std; void test01() { 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; //第一种删除 m.erase(m.begin()); //参数为迭代器 //第二种删除 m.erase(1); //按照key删除 //第三种删除 m.erase(m.begin(), m.end()); //区间删除 //第四种删除 m.clear(); //全部删除 } int main() { test01(); return 0; }
5,查找和统计
功能描述:
对map容器进行查找数据以及统计数据
函数原型:
find(key);
/*查找key是否存在,若存在,返回该元素的迭代器;
若不存在,返回end()迭代器*/
count(key); // 统计key的元素个数
/*map不允许插入重复key值,count统计结果要么是0,要么是1
multimap的count统计结果可能大于1*/
6,排序
map容器默认的排序方式是,按照key值进行从小到大的排序,但是我们可以利用仿函数实现从大到小排序,话不多说,直接上代码
#include<iostream> #include<map> using namespace std; class MyCompare { public: bool operator()(int v1,int v2)const { return v1 > v2; //降序 } }; void test01() { map<int, int, MyCompare>m; //加入仿函数 m.insert(make_pair(1, 10)); m.insert(make_pair(2, 20)); m.insert(make_pair(3, 30)); m.insert(make_pair(4, 40)); for (map<int, int,MyCompare>::iterator it = m.begin(); it != m.end(); it++) {//输出的时候别忘了加上 cout << "key=" << it->first << " value=" << it-> second << endl; } } int main() { test01(); return 0; }
另外,对于自定义数据类型,map必须要指定排序规则。
总结
到此这篇关于C++中不得不说的map容器的文章就介绍到这了,更多相关C++ map容器内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!