Chapter 10. Associative Containers

  • 定义: pair<T1,T2> p

    • 使用: p.first , p.second
  • 关联容器,有几个和顺序容器通用的操作要知道。

  • map<键,值>

    • 键类型存的内容不能相同,而且内容必须要支持 < 操作符,这是唯一的约束,至于是否支持其他的操作符,不做要求,当然你乐意写就写。

    • map类里边定义的类型

      • map<K, V>::key_type 在 map 容器中,用做索引的键的类型
      • map<K, V>::mapped_type 在 map 容器中,键所关联的值的类型
      • map<K, V>::value_type 一个 pair 类型,它的 first 元素具有 const map<K, V>::key_type 类型,而 second 元素则为 map<K, V>::mapped_type 类型
    • map的迭代器解引用将返回一个pair类型的对象

    • 用下标访问map,将在map里面添加一个键,对应的值会被初始化,内置类型初始化为0,类类型调用默认构造函数。

    • 下标操作符返回左值。所以你可以这样++word_count[word]

    • 插入的几种方法总结一下

    word_count.insert(pair<string,int>("Anna", 1));
    word_count.insert(map<string, int>::value_type("Anna", 1));
    word_count.insert(make_pair("Anna", 1));// 个人觉得最优雅的
    //或者你还可以
    typedef map<string,int>::value_type valType;
    word_count.insert(valType("Anna", 1));
    
    • 当insert函数里的参数是pair类型的时候,它的返回值是一个指向当前键的迭代器和一个bool类型的pair对。
    • map的查找操作,因为取下标操作会强行插入元素,有时候不想插入,可以用count和find函数。count(k)返回k出现的次数,find(k)返回迭代器或者末端迭代器。
  • set<键>

    • set只能保存键,应用场景是可以快速查询指定的键是否存在。
    • 初始化,可以用一段vector数据初始化。
    • 插入用insert。set不提供下标操作。
    • 获取元素只能通过find,当然你也可以用count查找。
    • set中的是键,所以是const类型的,不能修改。
  • multimap和multiset

    • 对multimap来说就是一个键下面有多个元素。
    • 查找元素的时候find和count要结合起来用,或者用lower_bound和upper_bound。最方便的还是enual_range函数,返回一对迭代器,如果键的值不存在,则返回一对相同的迭代器。
原文地址:https://www.cnblogs.com/arctanx/p/5227961.html