C++标准模板库(STL)如何使用multimap?用法示例

2021年4月5日12:55:08 发表评论 1,030 次浏览

Multimap类似于添加了多个元素具有相同键的map。此外,在本例中不要求键值和映射值对必须是唯一的。关于multimap需要注意的一件重要事情是,multimap始终保持所有键的排序顺序。multimap的这些特性使得它在竞争编程中非常有用。

一些与multimap相关的基本功能:

  • begin()–将迭代器返回到多图的第一个元素
  • end()–将迭代器返回到多元素映射中最后一个元素之后的理论元素
  • size()–返回多图中的元素数
  • max_size()–返回多图可以容纳的最大元素数
  • empty()–返回多图是否为空
  • 对<int, int> insert(keyvalue, multimapvalue)–向多图添加新元素

C++实现以说明上述功能 

CPP

#include <iostream>
#include <map>
#include <iterator>
 
using namespace std;
 
int main()
{
     multimap < int , int > gquiz1;  // empty multimap container
 
     // insert elements in random order
     gquiz1.insert(pair < int , int > (1, 40));
     gquiz1.insert(pair < int , int > (2, 30));
     gquiz1.insert(pair < int , int > (3, 60));   
     gquiz1.insert(pair < int , int > (6, 50));
     gquiz1.insert(pair < int , int > (6, 10));
 
     // printing multimap gquiz1
     multimap < int , int >::iterator itr;
     cout << "\nThe multimap gquiz1 is : \n" ;
     cout << "\tKEY\tELEMENT\n" ;
     for (itr = gquiz1.begin(); itr != gquiz1.end(); ++itr)
     {
         cout  <<  '\t' << itr->first
               <<  '\t' << itr->second << '\n' ;
     }
     cout << endl;
   
     //adding elements randomly, // to check the sorted keys property
       gquiz1.insert(pair < int , int > (4, 50));
       gquiz1.insert(pair < int , int > (5, 10));
       
       // printing multimap gquiz1 again
     
     cout << "\nThe multimap gquiz1 after
                   adding extra elements is : \n";
     cout << "\tKEY\tELEMENT\n" ;
     for (itr = gquiz1.begin(); itr != gquiz1.end(); ++itr)
     {
         cout  <<  '\t' << itr->first
               <<  '\t' << itr->second << '\n' ;
     }
     cout << endl;
   
   
   
     // assigning the elements from gquiz1 to gquiz2
     multimap < int , int > gquiz2(gquiz1.begin(), gquiz1.end());
 
     // print all elements of the multimap gquiz2
     cout << "\nThe multimap gquiz2 after
                          assign from gquiz1 is : \n";
     cout << "\tKEY\tELEMENT\n" ;
     for (itr = gquiz2.begin(); itr != gquiz2.end(); ++itr)
     {
         cout << '\t' << itr->first
              << '\t' << itr->second << '\n' ;
     }
     cout << endl;
 
     // remove all elements up to
     // element with value 30 in gquiz2
     cout << "\ngquiz2 after removal of
                              elements less than key=3 : \n";
     cout << "\tKEY\tELEMENT\n" ;
     gquiz2.erase(gquiz2.begin(), gquiz2.find(3));
     for (itr = gquiz2.begin(); itr != gquiz2.end(); ++itr)
     {
         cout << '\t' << itr->first
              << '\t' << itr->second << '\n' ;
     }
 
     // remove all elements with key = 4
     int num;
     num = gquiz2.erase(4);
     cout << "\ngquiz2.erase(4) : " ;
     cout << num << " removed \n" ;
     cout << "\tKEY\tELEMENT\n" ;
     for (itr = gquiz2.begin(); itr != gquiz2.end(); ++itr)
     {
         cout << '\t' << itr->first
              << '\t' << itr->second << '\n' ;
     }
 
     cout << endl;
 
     //lower bound and upper bound for multimap gquiz1 key = 5
     cout << "gquiz1.lower_bound(5) : " << "\tKEY = " ;
     cout << gquiz1.lower_bound(5)->first << '\t' ;
     cout << "\tELEMENT = " << gquiz1.lower_bound(5)->second << endl;
     cout << "gquiz1.upper_bound(5) : " << "\tKEY = " ;
     cout << gquiz1.upper_bound(5)->first << '\t' ;
     cout << "\tELEMENT = " << gquiz1.upper_bound(5)->second << endl;
 
     return 0;
}

输出如下:

The multimap gquiz1 is : 
    KEY    ELEMENT
    1    40
    2    30
    3    60
    4    20
    5    50
    6    50
    6    10


The multimap gquiz2 after assign from gquiz1 is : 
    KEY    ELEMENT
    1    40
    2    30
    3    60
    4    20
    5    50
    6    50
    6    10


gquiz2 after removal of elements less than key=3 : 
    KEY    ELEMENT
    3    60
    4    20
    5    50
    6    50
    6    10

gquiz2.erase(4) : 1 removed 
    KEY    ELEMENT
    3    60
    5    50
    6    50
    6    10

gquiz1.lower_bound(5) :     KEY = 5        ELEMENT = 50
gquiz1.upper_bound(5) :     KEY = 6        ELEMENT = 50

多图功能列表:  

  • C++ STL中的multimap::operator =–通过替换现有内容将新内容分配给容器。
  • C++ STL中的multimap::crbegin()和multimap::crend()–crbegin()返回一个常量反向迭代器, 该迭代器引用multimap容器中的最后一个元素。crend()返回一个常数反向迭代器, 该迭代器指向多图中第一个元素之前的理论元素。
  • C++ STL中的multimap::emplace_hint()–将键及其元素插入具有给定提示的multimap容器中。
  • C++ STL中的multimap clear()函数–从多图上删除所有元素。
  • C++ STL中的multimap empty()函数–返回多图是否为空。
  • C++ STL中的multimap maxsize()–返回多图容器可以容纳的最大元素数。
  • C++ STL中的multimap value_comp()函数–返回确定多重地图中元素排序方式的对象(默认情况下为" <")
  • C++ STL中的多图撕裂–返回指向多图容器第一个元素之前的理论元素的反向迭代器。
  • C++ STL中的multimap::cbegin()和multimap::cend()–cbegin()返回一个常量迭代器, 该迭代器引用multimap容器中的第一个元素。cend()返回一个常量迭代器, 该迭代器指向在多图中最后一个元素之后的理论元素。
  • C++ STL中的multimap::swap()–将一个多图的内容交换为相同类型和大小的另一个多图。
  • C++ STL中的多图rbegin–返回指向容器最后一个元素的迭代器。
  • C++ STL中的multimap size()函数–返回多图容器中的元素数。
  • C++ STL中的multimap::emplace()–将键及其元素插入多图容器。
  • C++ STL中的multimap::begin()和multimap::end()–开始()返回一个引用了multimap容器中第一个元素的迭代器。结束()返回迭代器, 该迭代器返回到multimap中最后一个元素之后的理论元素。
  • C++ STL中的multimap upper_bound()函数–将迭代器返回到等效于键值为" g"的多重映射值的第一个元素, 或者肯定会在多图中的键值为" g"的元素之后。
  • C++ STL中的multimap::count()–返回多图中键值为" g"的元素的匹配数。
  • C++ STL中的multimap::erase()–从多重地图中删除键值。
  • C++ STL中的multimap::find()–如果找到, 则将迭代器返回键值为" g"的元素, 并返回到结束。
  • C++ STL中的multimap equal_range()–返回成对的迭代器。该对是指范围的边界, 该范围包括容器中所有具有等于k的键的元素。
  • C++ STL中的multimap insert()–用于在多图容器中插入元素。
  • C++ STL中的multimap lower_bound()函数–将迭代器返回到等效于键值为" g"的多重映射值的第一个元素, 或者绝对不会在多重映射中的键值为" g"的元素之前。
  • C++ STL中的multimap key_comp()–返回确定多重映射中元素排序方式的对象(默认为" <")。

最近关于Multimap的文章

如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请发表评论。

被认为是行业中最受欢迎的技能之一, 我们拥有自己的编码基础C++ STL通过激烈的问题解决过程来训练和掌握这些概念。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: