C++标准库学习之 STL 关联式容器简单介绍

53 阅读2分钟

关联式容器的特点是 这是一种已经排序的集合,元素的位置取决于 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