-
定义: 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函数,返回一对迭代器,如果键的值不存在,则返回一对相同的迭代器。