C++关联容器

关联容器:关联容器中的元素是按照关键字来保存和访问的。也就是通过键去获得对应的值 。两个主要的关联容器类型是map和set。
map中的元素是关键字-值对,set中的元素只包含一个关键字

有序容器

关联容器类型 作用
map 关键字-值对
set 关键字
multimap 关键字可重复出现的map
multiset 关键字可重复出现的set
关联容器额外的类型别名 作用
key_type 此容器类型的关键字类型
mapped_type 每个关键字关联的类型,只适用于map
value_type 对于set,与key_type相同,对于map,为pair<const key_type,mapped_type>
set<string>::value_type v1;         //v1是一个 string 类型 
set<string>::key_type v2;           //v2是一个 string 类型 
map<string,int>::value_type v3;     //v3是一个 pair<const string,int> 类型 
map<string,int>::key_type v4;       //v4是一个 string 类型 
map<string,int>::mapped_type v5;    //v5是一个 int 类型 



insert(或emplace)进行插入操作的时候,如果容器中已经存在这个关键字,就什么也不做,如果不存在,就进行插入操作,并返回一个pair,告诉我们插入操作是否成功。

#include <iostream>
#include <map>
#include <list>
using namespace std;

int main(){
    map<string,int> map_count;

    //向map中添加元素的四种方法 
    map_count.insert({"aaa",1});
    map_count.insert(pair<string,int>("bbb",2));
    map_count.insert(map<string,int>::value_type("ccc",3));
    map_count.insert(make_pair("ddd",4));

    return 0;
}



对于map而言,value_type是一个pair类型,其 first 成员保存关键字,second 成员保存值。并且需要通过->来访问 first 和 second 成员的值。我们可以改变 pair 的值,但不能改变关键字成员的值,因为关键字是const 的。
对于set而言,set的迭代器也是const的。

#include <iostream>
#include <map>
#include <list>
using namespace std;

int main(){
    map<string,int> map_count;

    //向map中添加元素的四种方法 
    map_count.insert({"aaa",1});
    map_count.insert(pair<string,int>("bbb",2));
    map_count.insert(map<string,int>::value_type("ccc",3));
    map_count.insert(make_pair("ddd",4));

    //删除元素
    map_count.erase("aaa");

    //通过键去访问 
    cout << map_count["bbb"] << endl;;

    //查找元素
    map_count.find("ccc");      //返回一个迭代器,指向第一个关键字为ccc的元素,若ccc不再容器中,则返回尾后迭代器
    map_count.count("ccc");     //返回关键字等于ccc的元素的数量。

    map_count.lower_bound("ccc"); //返回一个迭代器,指向第一个关键字不小于k的元素 
    map_count.upper_bound("ccc"); //返回一个迭代器,指向第一个关键字大于k的元素

    //遍历map
    map<string,int>::iterator iter = map_count.begin();
    while(iter != map_count.end()){
        cout << iter->first << " = " << iter->second << endl;
        ++iter; 
    } 
    return 0;
}


无序容器

猜你喜欢

转载自blog.csdn.net/qq_36748278/article/details/79978947
今日推荐