STL 之 multimap 多重映照容器

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());
  • (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);
  • (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)
  • (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 (例子)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值