zoukankan      html  css  js  c++  java
  • 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函数,返回一对迭代器,如果键的值不存在,则返回一对相同的迭代器。
  • 相关阅读:
    作业
    剑指Offer:链表中倒数第k个节点
    剑指Offer:反转链表
    剑指Offer:数值的整数次方
    剑指Offer:剪绳子Ⅰ和剪绳子Ⅱ
    剑指Offer:机器人的运动范围
    Linux下进程与线程的区别
    剑指Offer:调整数组顺序使奇数位于偶数前面
    剑指Offer:删除链表的节点
    剑指Offer:打印从1到最大的n位数
  • 原文地址:https://www.cnblogs.com/arctanx/p/5227961.html
Copyright © 2011-2022 走看看