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通过激烈的问题解决过程来训练和掌握这些概念。