Chapter 10. Associative Containers

it2022-05-09  17

定义: 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


最新回复(0)