stl之multimap容器

  • multimap与map一样,都是使用红黑树对记录型的元素数据按元素键值的比较关系,进行快速的插入、删除和检索操作,所不同的是multimap允许插入具有重复性键值的元素。
  • 在multimap容器中,元素的键值与元素的映照数据的映照关系是多对多的,即multimap是多重映照容器。
  • 由于元素键值允许重复,使得数组操作符“[]”利用键值来访问元素没有意义,故而multimap并没有定义数组方式的“[]”操作运算。


multimap与map容器共用同一个c++标准头文件map,因此需要加上头文件#include<map>才能编译运行。

创建multimap对象

  1. multimap(); //创建一个没有任何元素的multimap对象
  2. multimap(constkey_compare& comp); //指定一个比较函数对象comp来创建multimap对象,内存分配器为默认值。
  3. multimap(constmap&); //拷贝构造函数,用一个multimap容器的元素和比较函数,拷贝生成一个新的multimap容器对象。
  4. multimap(InputIteratorfirst, InputIterator last); //用迭代器区间[first)所指的数据,作为multimap容器的元素(包括键值和映照数据),创建一个multimap容器对象。

元素的插入

与map容器一样,multimap容器可使用insert函数,插入元素到容器的红黑树结构中。但不能像map那样,使用数组操作符“[]”进行元素添加。

  1. pair<iterator,bool>insert(const value_type& v)

    将元素v(包括键值和映照数据)插入multimap容器,允许v的键值和容器中的某元素键值重复。返回一个pair配对对象,提供所插入元素的迭代器位置和true/false插入成功标志。

  2. iteratorinsert(iterator position, const value type& v)

    将元素v(包括键值和映照数据)插入multimap容器,参数position只是提示可在position位置之前插入v,所返回的插入位置视情况而定,不一定在position位置前插入。

  3. voidinsert(InputIterator first, InputIterator last)

    将迭代器区间[first,last)所指的数据作为容器元素(包括键值和映照数据),插入到multimap容器中。

元素的删除

  1. void erase(iteratorposition)

    删除 position所指的元素

  2. size_type erase(const key_type& k)

    删除等于键值 k的元素,返回删除的元素个数

  3. void erase(iterator first, iterator last)

    删除map迭代器区间 [first,last)上的所有元素

  4. void clear()删除map容器的所有元素

元素的遍历访问

不同于map容器,multimap容器只能采用迭代器的方式,而不能用数组方式进行遍历。

  1. iterator begin()
  2. iterator end()
  3. reverse_iterator rbegin()
  4. reverse_iterator rend()

其他函数

map相同。总之,应用起来还是很方便的,后面会对实现源码进行剖析。

转载请注明出处:http://blog.csdn.net/lsh_2013/article/details/46839513

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-07 19:51:13

stl之multimap容器的相关文章

初探STL之关联容器

关联容器 分类:set, multiset, map, multimap 特点:内部元素有序排列,新元素插入的位置取决于它的值,查找速度快. 常用函数: find: 查找等于某个值 的元素(x小于y和y小于x同时不成立即为相等) lower_bound : 查找某个下界 upper_bound : 查找某个上界 equal_range : 同时查找上界和下界 count :计算等于某个值的元素个数(x小于y和y小于x同时不成立即为相等) insert: 用以插入一个元素或一个区间 set 特点:

STL之关联容器的映射底层

STL的关联容器有set, map, multiset, multimap.用于实现它们的底层容器有划入标准的rb_tree和待加入标准的hashtable. 底层容器rb_tree为上层容器提供了一种有序的服务.关键步骤时间复杂度为O(lgN); 底层容器hashtable为上层容器提供的是无序的服务,但其关键步骤的时间复杂度为O(1). 那么上层容器是怎么映射到底层容器中去的呢?下面以set和map为例,说明它们是如何映射到rb_tree和hashtable的. 1 rb_tree模板头 对

STL中的容器

STL中的容器 一. 种类: 标准STL序列容器:vector.string.deque和list. 标准STL关联容器:set.multiset.map和multimap. 非标准序列容器slist和rope.slist是一个单向链表,rope本质上是一个重型字符串 非标准关联容器hash_set.hash_multiset.hash_map和hash_multimap. 几种标准非STL容器,包括数组.bitset.valarray.stack.queue和priority_queue 值得

STL&lt;一&gt;:主要容器简介

vector : 向量 list : 双向链表容器,提供数据结构中链表的所有功能 queue : 队列容器,提供数据结构中队列的所有功能 stack : 栈容器,提供数据结构中栈的所有功能 deque : 双端栈容器,提供数据结构中栈的所有功能 priority_queue : 优先队列,一种按值排序的队列容器 set : 集合容器 multiset : 允许出现重复元素的集合容器 map<key,value> ; 关联数组容器 multimap<key,value> : 允许出现

C++STL之关联容器【map】【set】

map以键-值対的形式组织,键的作用在于索引,而值表示所存储和读取数据. set仅包含一个键,并且有效的支持某个键是否存在的查询. 他们都是基于标准型类库pair实现,该类型在utility头文件中. 一:关于pair类型的操作 pair<T1,T2> p1; //创建一个空pair类型 pair<T1,T2> p1(v1,v2); //创建并初始化 make_pair(v1,v2) //生成pair对象 <,>,==,!=  //类型之间比较,遵循字典序,先比较fir

STL中各容器之函数总结

一.序列和关联非共有函数 所有标准库共有函数  (构造,相关属性,迭代器,插入与删除,比较,swap) 其中operator>,operator>=,operator<,operator<=,operator==,operator!=均不适用于priority_queue 顺序容器和关联容器共有函数 (1)   序列容器都提供5种相同的构造方法:关联容器都提供3种相同的构造方法 (2)    还有insert插入函数(序列容器有3个相同版本的插入.关联容器也有3个版本的) (3) 

第十三篇:multimap容器和multiset容器中的find操作

前言 multimap容器是map容器的“ 增强版 ”,它允许一个键对应多个值.对于map容器来说,find函数将会返回第一个键值匹配元素所在处的迭代器.那么对于multimap容器来说,find函数将如何运作呢?如果要实现和map容器的find函数同样的功能,则它将返回多个迭代器,这样太复杂了.本文将讲解C++中multimap容器的“ find实现 ”. 解决思路一 摒弃find函数,使用另外两个新函数,它们是专家们为了解决multimap中的“ find操作 ”问题专门设计的: 1. lo

【C++之STL】理解容器(ing)

“容器可容纳一些数据的模板类” “容器是包容其他对象的对象” 两种类型:顺序容器.关联容器   顺序容器 关联容器 访问成员 顺序访问和随机访问 经过优化关键键值访问                   任何改变vector长度的操作都会是已存在的迭代器失效,如erase()删除元素 [C++之STL]理解容器(ing),布布扣,bubuko.com

STL之multimap

参见http://www.cplusplus.com/reference/map/multimap/ 多重映射multimap和map映射很相似,但是multimap允许重复的关键字,这使得multimap在某些情况下会更有用,比如说在电话簿中同一个人可以有多个电话号码 multimap中并没有像map那样提供重载的operator[],因此不能通过operator[]给元素赋值template < class Key,                                     /