分享

map以及使用举例--C++基础

 KookNut39 2021-12-15

关联式容器:
map的特性就是所有元素都会根据元素的key被自动排序,map的所有元素是同时拥有key和value。map不允许两个元素有相同的key。而当map同时拥有key和value的时候,它的迭代器可以修改其中的内容吗?key不可以,因为key是用来排列数据的,但是value的值就可以改变了。
当我做到set的测试时候,我想着能不能传一个结构体进来,进行set操作,看看会发生什么,没想到连编译都通不过,实在是想多了,但是map好像可以很简单的实现这个想法欸!
示例代码:

#include"Test.h"

#include<map>
#include<string>
#include<algorithm>//为了使用find、sort等方法
void main()
{
setlocale(LC_ALL, "chs");//识别中文
map<string, int> v1;
v1[string("Janney")] = 9;
v1[string("Fanney")] = 3;
v1[string("Fgnney")] = 6;
v1[string("Tanney")] = 7;
v1[string("Banney")] = 8;
v1[string("Benney")] = 1;
v1[string("Bbnney")] = 0;
v1[string("Bbnney")] = 90;//key值相同时,相当于修改了value
pair<string, int> v5("KookNut", 39);
v1.insert(v5);
for (map<string, int>::iterator v2 = v1.begin();
v2 != v1.end();
v2++)
{
cout << v2->first << endl;
cout << v2->second << endl;
}
int Number = v1[string("KookNut")];
v1.erase(string("Tanney"));
map<string, int>::iterator v3 = v1.find(string("Fgnney"));
v3->second = 99;//修改value
//v3->first = string("Fddd");
getchar();
}

自动按照key值排序
在这里插入图片描述

key值不可以修改
在这里插入图片描述
自然的,有multiset就有multimap,multimap的特性以及用法与map完全相同,唯一的区别在于它允许key重复。
简单修改:

void main()
{
setlocale(LC_ALL, "chs");//识别中文
multimap<string, int> v1;


v1.insert(make_pair(("Fanney"),3));
v1.insert(make_pair(("Fgnney"), 6));
v1.insert(make_pair(("Tanney"), 7));
v1.insert(make_pair(("Banney"), 8));
v1.insert(make_pair(("Benney"), 1));
v1.insert(make_pair(("Bbnney"), 0));
v1.insert(make_pair(("Bbnney"), 90));

pair<string, int> v5("KookNut", 39);
v1.insert(v5);
for (map<string, int>::iterator v2 = v1.begin();
v2 != v1.end();
v2++)
{
cout << v2->first << endl;
cout << v2->second << endl;
}
v1.erase(string("Tanney"));
map<string, int>::iterator v3 = v1.find(string("Fgnney"));
v3->second = 99;//修改value
getchar();
}

在这里插入图片描述
“有志者,事竟成,破釜沉舟,百二秦关终属楚;
苦心人,天不负,卧薪尝胆,三千越甲可吞吴。”
参考书籍:
《STL源码剖析》

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约