C++关联容器

关联容器

关联容器定义

  • 初始化mapset

    1
    2
    3
    4
    5
    6
    7
    8
    9
    //默认初始化
    map<int,string>mapa; //默认初始化为空容器,int为关键字类型,string为值类型
    set<int>seta; //默认初始化为空容器,int为关键字类型

    //列表初始化,值可以转换为容器所需类型即可
    set<string>setb = {"a","b","c"};
    map<string,string>mapb = {{"a","b"},{"c","d"}};

    //初始化为同类型容器的拷贝
  • 初始化multimapmultiset

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
      ```

    ### 关联容器的Value_type

    - `map`和`unordered_map`的`Value_type`为`pair`类型

    ### 关联容器操作

    #### 添加元素

    - `c.insert(v)`:`v`是`value_type`类型的对象

    #### 删除元素

    - `c.erase(k)`:从`c`中删除所有关键字为`k`的元素。返回`size_type`值,指出删除元素的数量。

    #### 查找元素

    - `c.count(k)`:返回容器中关键字等于`k`的元素数量。
    - `c.find(k)`:返回指向第一个关键字为`k`的元素的迭代器。如果没有,返回尾后迭代器。

    #### 访问与修改

    ##### 使用迭代器

    - 关联容器的迭代器解引用之后为`value_type`类型,`map`的`value_type`为`pair`类型。其`first`成员保存了`const`的关键字,`second`成员保存关键字对应的值

    ```C++
    auto iter = Map.begin();
    cout << iter->first << endl; //打印关键字
    cout << iter->first << endl; //打印对应的值
    iter->first = 1; //错误,关键字是const类型,无法改变
    iter->second = 1; //正确,可以通过迭代器修改关键字对应的值