STL — map
参考:
https://baike.baidu.com/item/Map/5808503?fr=aladdin
https://bbs.csdn.net/topics/270020481( map<string,int>和map<char *,int>有什么区别?)
https://www.cnblogs.com/eilearn/p/9473804.html(map 排序)
一,概述:
1,定义
Map 是 STL 的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力。
2,功能
由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。
3,map 内部数据的组织
map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,
二,map 的使用
1,map 的构造函数
map<int, string> maphai;
map<char, int> maphai;
map<string, char> mapstring;
map<string, int> mapstring;
map<int, char>mapint;
map<char, string>mapchar;
2,数据的插入
① 插入 pair 类型的数据。当 map 已经存在某个值时,就无法再插入
map<int, char>m;
m.insert((pair<int, char>(1, 'A')));
② 用数组方式插入数据,会覆盖重复的数据
map<char, int>m;
m['A'] = 1;
3,常见函数
m.size() 大小
m.count 返回的是被查找元素的个数。map中不存在相同元素,所以返回值只能是1或0。可以用这个知道有无出现,但不知道位置 出现为 1,不出现为 0
m.find() 同 vector
m.empty()
m.clear()
lower_bound 返回下界的迭代器
upper_bound 返回上界的迭代器
m.erase(1) 删除 1 ,成功返回 1 ,失败返回 0
4,当以 char* 做 key 时,STL 中默认是以字符串为 key 还是以地址为 key?
<char*, int> 是以地址为 key,<string, int> 是以 string 为 key。
5,map 的排序
参数:map<key, value>
① 按 key 升序:第三个参数是用于函数比较的,没有的话默认 less,即按 key 升序
② 按 key 降序:map<key, value, greater<key的类型> >
③ 如果想要按照 value 升降序的话,可以将 map 移到 vector,再用 sort 排序
6,示例
#define _CRT_SECURE_NO__WARNINGS #include<iostream> #include<algorithm> #include<stdio.h> #include <vector> #include<string> #include<map> #include <functional> using namespace std; typedef pair<string, int> P; bool cmp(const P& a, const P& b) { return a.second < b.second; } int main(void) { // 创建 map<string, int> m; // 插入数据 m["NaNa"] = 99; m["LuNa"] = 66; m.insert(make_pair("Michael", 44)); m.insert(make_pair("Jack", 88)); // 遍历 for (auto i = m.begin(); i != m.end(); i++) cout << (*i).first << ' ' << (*i).second << endl; cout << endl; // 将 map 中的内容转存到 vector 中,并排序 vector<pair<string, int>> v(m.begin(), m.end()); sort(v.begin(), v.end(), cmp); // 遍历 for (int i = 0; i < v.size(); i++) cout << v[i].first << ' ' << v[i].second << endl; system("pause"); return 0; }
========= ========= ========= ====== ====== ===== ==== === == =
锦瑟 李商隐 唐
沧海月明珠有泪,蓝田日暖玉生烟。
此情可待成追忆?只是当时已惘然。