Multimap类似于添加了多个元素具有相同键的map。此外,在本例中不要求键值和映射值对必须是唯一的。关于multimap需要注意的一件重要事情是,multimap始终保持所有键的排序顺序。multimap的这些特性使得它在竞争编程中非常有用。
一些与multimap相关的基本功能:
- begin()–将迭代器返回到多图的第一个元素
- end()–将迭代器返回到多元素映射中最后一个元素之后的理论元素
- size()–返回多图中的元素数
- max_size()–返回多图可以容纳的最大元素数
- empty()–返回多图是否为空
- 对< int, int> insert(keyvalue, multimapvalue)–向多图添加新元素
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 againcout <
<
"\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 :
KEYELEMENT
140
230
360
420
550
650
610The multimap gquiz2 after assign from gquiz1 is :
KEYELEMENT
140
230
360
420
550
650
610gquiz2 after removal of elements less than key=3 :
KEYELEMENT
360
420
550
650
610gquiz2.erase(4) : 1 removed
KEYELEMENT
360
550
650
610gquiz1.lower_bound(5) :KEY = 5ELEMENT = 50
gquiz1.upper_bound(5) :KEY = 6ELEMENT = 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()–返回确定多重映射中元素排序方式的对象(默认为" < ")。
如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请发表评论。
被认为是行业中最受欢迎的技能之一, 我们拥有自己的编码基础C++ STL通过激烈的问题解决过程来训练和掌握这些概念。
推荐阅读
- McAfee面试体验| SDE-2(4.5年经验)
- 时钟问题(找出时钟指针之间的角度)
- 优盘不显示,教您优盘不显示怎样办
- 磁盘被写保护怎样解除,教您如何处理U盘磁盘被写保护
- 安装系统 U盘装系统,教您怎样用U盘重装系统
- u盾密码忘了怎样办,教您u盾密码忘了怎样办
- 优盘打开不了,教您U盘打开不了怎样修好
- 设置u盘打开,教您怎样设置u盘打开
- 电脑密码忘记怎样办,教您电脑开机密码忘记怎样办