关联式容器的特点是 这是一种已经排序的集合,元素的位置取决于 value(或者key) 和给定的排序准则来确定的 ,与插入的顺序无关
Set 根据 value 自动排序,每个元素只能出现一次,不允许重复
void tsm_set(){
set<string> tsm_set ={"北京","上海","广州","深圳","南京","武汉","成都","北京"};
for(auto item:tsm_set){
cout<< item<<endl;
}
cout<< "------------------------------------"<<endl;
tsm_set.insert({"天津","北京","重庆"});
for(auto item:tsm_set){
cout<< item<<endl;
}
}
结果:
上海
北京
南京
广州
成都
武汉
深圳
------------------------------------
上海
北京
南京
天津
广州
成都
武汉
深圳
重庆
Multiset 根据 value 自动排序,元素可以重复,
void tsm_set(){
multiset<string> tsm_set ={"北京","上海","广州","深圳","南京","武汉","成都","北京"};
for(auto item:tsm_set){
cout<< item<<endl;
}
cout<< "------------------------------------"<<endl;
tsm_set.insert({"天津","北京","重庆"});
for(auto item:tsm_set){
cout<< item<<endl;
}
}
结果:
上海
北京
北京
南京
广州
成都
武汉
深圳
------------------------------------
上海
北京
北京
北京
南京
天津
广州
成都
武汉
深圳
重庆
Map 每个元素是一个 key value 的pair, key 是排序准则的基础,key只能出现一次,
void tsm_map(){
map<int,string> tsm_map;
for (int i = 0; i < 4; ++i) {
tsm_map.insert(make_pair(i,std::to_string(i*i)));
}
for (int i = 6; i < 10; ++i) {
tsm_map.insert(make_pair(i,std::to_string(i*i)));
}
for(auto item:tsm_map){
cout<< "key:" <<item.first <<" value:"<< item.second<<endl;
}
cout<< "------------------------------------"<<endl;
tsm_map.insert(make_pair(5,"后插入的"));
tsm_map.insert(make_pair(5,"后插入的"));
cout<<tsm_map[3]<<endl;
if(!tsm_map[3].empty()){
tsm_map[3]="替换数据";
}
for(auto item:tsm_map){
cout<< "key:" <<item.first <<" value:"<< item.second<<endl;
}
}
结果:
key:0 value:0
key:1 value:1
key:2 value:4
key:3 value:9
key:6 value:36
key:7 value:49
key:8 value:64
key:9 value:81
------------------------------------
9
key:0 value:0
key:1 value:1
key:2 value:4
key:3 value:替换数据
key:5 value:后插入的
key:6 value:36
key:7 value:49
key:8 value:64
key:9 value:81
MultiMap 每个元素是一个 key value 的pair, key 是排序准则的基础,key 可以重复,key 重复就代表着 key value 的 pair 可以重复
void tsm_map(){
multimap<int,string> tsm_map;
for (int i = 0; i < 4; ++i) {
tsm_map.insert(make_pair(i,std::to_string(i*i)));
}
for (int i = 6; i < 10; ++i) {
tsm_map.insert(make_pair(i,std::to_string(i*i)));
}
for(auto item:tsm_map){
cout<< "key:" <<item.first <<" value:"<< item.second<<endl;
}
cout<< "------------------------------------"<<endl;
tsm_map.insert(make_pair(5,"后插入的"));
tsm_map.insert(make_pair(5,"后插入的"));
for(auto item:tsm_map){
cout<< "key:" <<item.first <<" value:"<< item.second<<endl;
}
}
相比较与 map , MultiMap 没有 MultiMap[key] 这个方法 ,原因就是 key 不唯一,
结果:
D:\CWorkSpace\tsmTest\cmake-build-debug\tsmTest.exe
key:0 value:0
key:1 value:1
key:2 value:4
key:3 value:9
key:6 value:36
key:7 value:49
key:8 value:64
key:9 value:81
------------------------------------
key:0 value:0
key:1 value:1
key:2 value:4
key:3 value:9
key:5 value:后插入的
key:5 value:后插入的
key:6 value:36
key:7 value:49
key:8 value:64
key:9 value:81
Process finished with exit code 0