C++ map容器
独取一瓢C++ 人气:1前言
为什么这两天在研究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必须要指定排序规则。
总结
加载全部内容