map用法总结
参考资料:
1、C++ map用法总结
2、map的基本操作
3、关于哈希表,你该了解这些
1 map简介
map 是STL的一个关联容器,提供一对一的hash
1.1 第一个可以称为关键字(key),每个关键字只能在map中出现一次;
1.2 第二个可以称为该关键字的值(value);
1.3 参考代码随想录中对哈希表的介绍
2 map功能
2.1 自动建立key - value 的对应,key 和value 可以是任意需要的类型,包括自定义类型。
2.2 map是有序的,会按照关键字从小到大进行排序,如果关键字是字符串,会按照第一个字符的大小进行排序,从A到Z(a 到 z); 可运行3.1的代码进行理解。
3 使用map
3.1 向map添加元素
一共有四种方式
mmap.insert(pair<string,int>("fsdfads", 43));//第一种插入方式
mmap.insert(map<string, int>::value_type("fsdf", 5));//第二种
mmap["fsdff"] = 3;//第三种
mmap.insert({
"fsd",4 });//第四种
注意从hash表里取值是随机的?
后面用的是第四种方式进行介绍
#include <iostream>
#include <string>
#include <map>
#include <algorithm>
using namespace std;
int main() {
map<string, int> Mmap;
Mmap.insert({
"yi", 2 });
Mmap.insert({
"er", 3 });
Mmap.insert({
"yi", 4 });
Mmap.insert({
"er", 5 });
for (auto it : Mmap) {
cout << it.first << " " << it.second << endl;
}
return 0;
}
3.1.1 不会重复插入相同key
从3.1的运行结果我们可以知道,Mmap的第三条和第四条插入语句时没法插入成功的,因为前面已经对相同键值做过了插入操作,后面就不会再插入了。
3.1.2 重复插入相同key,原key对应的value值不变
如果想要四条语句都插入成功可以考虑用multimap,multimap是可以存在重复键值的,下面是验证程序
3.1.3 插入相同key,value值改变
map容器最常用的方法——kv对计数,如果插入的元素还没存在就插入,并给value赋值为1,如果插入的元素已经存在就不再插入而是给对应的键的值加1
#include <iostream>
#include <string>
#include <map>
#include <algorithm>
using namespace std;
int main() {
map<string, int> Mmap;
string s;
while (cin >> s) {
Mmap[s] ++; //s是键值key,这里是指如果s已经存在于Mmap中,则该key对应的value值加一
}
for (auto it : Mmap) {
cout << it.first << " " << it.second << endl;
}
return 0;
}
这里要停止输入需要按:Ctrl+z,才能跳到for循环进行输出
3.2 对map中的value进行排序
#include <iostream>
#include <string>
#include <map>
#include <algorithm>
#