multimap 介绍
与 map 不同,multimap支持键值重复插入,并且没有定义数组"[]"操作运算
multimap 使用和方法
1. 创建 multimap 对象
- (1) multimap ()
- map <元素类型, 映射数据类型, greater/less<元素类型>> MultiMapName; // 也可重载 '<' 符号,和自定义仿函数
- 例如:multimap <char, int, greater<char>> mm;
- (2) multimap (const key_compare& comp)
- 指定一个比较函数对象 comp 来创建 multimap 对象
- struct strLess
- {
- bool operator (const char * s1, const char * s2) const
- { return strcmp(s1, s2) < 0;}
- }
- multimap <const char*, int> mm(strLess());
- 指定一个比较函数对象 comp 来创建 multimap 对象
- (3) multimap (const multimap&)
- multimap <int, char*> mm1;
- multimap p <int, char*> mm2(mm1);
- (4) multimap (InputIterator first, InputIterator last)
- 用迭代区 [first, last) 创建
- pair <const int, char> p1(1, 'a');
- pair <const int, char> p2(2, 'b');
- pair <const int, char> p3(2, 'c');
- pair <const int, char> pairArray[] = {p1, p2, p3};
- multimap <const int, char> mm(pairArray. pairArray+3);
- 用迭代区 [first, last) 创建
- (5) multimap (InputIterator first, InputIterator last, const key_compare& com)
- multimap <const int, char> mm(pairArray. pairArray+3, greaster<const int>());
2. 元素的插入
- (1) pair <iterator, bool> insert (const value_type &v)
- 将元素 v 包括键值和映照数据插入。返回插入元素的迭代器位置和插入是否成功的标志
- 例如:
- multimap<int, char*> enumMap;
- enumMap.insert(pair<int, Cstring>(1, “One”));
- enumMap.insert(multimap<int, Cstring>::value_type (1, “One”));
- (2) iterator insert(iterator position, const value_type& v)
- 将元素 v 插入容器,参数 position 值提示在 position 位置之前插入,所返回的插入值视实际情况而定。(不一定能在 position 位置前插入)
- (3) void insert (InputIterator first, InputIterator last)
- 将迭代取件 [first, last) 所指的数据作为由容器元素插入到 multimap 容器
3. 元素的删除
- (1) void erase (iterator position)
- 删除 position 所指的元素
- (2) size_type erase (const key_type &k)
- 删除键值为 k 的元素,返回删除的个数
- (3) void erase (iterator first, iterator last)
- 删除区间 [first, last) 的元素
- (4) void clear ()
- 清空容器中所有元素
4. 元素的遍历
- (1) 顺序遍历
- iterator begin()
- iterator end()
- (2) 元素的反向遍历
- reverse_iterator rbegin();
- reverse_iterator iend()
5. 元素的搜索
- (1) size_type count(const key_type& k) const;
- //返回键值等于k的元素个数,其缺点是无法定位数据出现位置
- (2) iterator find (const key_type& k) const
- 搜索到则返回迭代器位置,反之返回 end() 结束元素位置;获取的iterator数据类型是一个std::pair对象,包括两个数据。
- iterator->first 关键字(key)
- iterator->second 存储的数据(value)
- 搜索到则返回迭代器位置,反之返回 end() 结束元素位置;获取的iterator数据类型是一个std::pair对象,包括两个数据。
- (3) pair<iterator, iterator> equal_range(const key_type& k)
- 满足条件的区间
- 第一个变量为 lower_bound(k) // x>=k 的第一个元素位置
- 第二个变量为 upper_bound(k) // x>k 的第一个元素位置
6. 其他函数
- bool empty ():判断是否为空
- size_type size () const:容器中元素的个数
- void swap (map &):容器交换
- iterator lower_bound(const key_type& k):返回第一个大于等于 k 的元素位置
- iterator upper_bound(const key_type& k):返回第一个大于 k 的元素位置
参考资料:
C++ STL 值 multimap (例子)