关联式容器:
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源码剖析》