multimap 容器保存的是有序的键/值对,但它可以保存重复的元素。multimap 中会出现具有相同键的元素序列,它们会被添加到容器中。multimap 和 map 有相同范围的构造函数,默认的比较键的函数是 less()。
multimap 大部分成员函数的使用方式和 map 相同。因为重复键的原因,multimap 有一些函数的使用方式和 map 有一些区别。
1、简单举例使用如下:
#include "stdafx.h"
#include <iostream>
#include <map>
#include<string>
using namespace std;
typedef std::multimap <string, string> MultMap;
int main()
{
MultMap phonebook;
phonebook.insert(std::make_pair("mary", "12345"));
phonebook.insert(std::make_pair("jany","33562"));
phonebook.insert(std::make_pair("jame", "35897"));
phonebook.insert(std::make_pair("mary", "98654"));
phonebook.insert(std::make_pair("fabf", "89043"));
phonebook.insert(std::make_pair("lily", "32178"));
auto mapItor = phonebook.begin();
for (; mapItor != phonebook.end(); ++mapItor)
{
cout << "name= " << mapItor->first << ",number= " << mapItor->second << endl;
}
return 0;
}
执行结果如下:
可以看出multimap默认排序还是key的字母顺序;
2、count(k) 函数统计key个数
count(k) 成员函数返回与给定键关联的值得数量。
cout << "The name=mary de number count= " << phonebook.count("mary") << endl;
3、equal_range()得到所有相关key的数据
#include "stdafx.h"
#include <iostream>
#include <map>
#include<string>
using namespace std;
typedef std::multimap <string, string> MultMap;
int main()
{
MultMap phonebook;
phonebook.insert(std::make_pair("mary", "12345"));
phonebook.insert(std::make_pair("jany","33562"));
phonebook.insert(std::make_pair("jame", "35897"));
phonebook.insert(std::make_pair("mary", "98654"));
phonebook.insert(std::make_pair("fabf", "89043"));
phonebook.insert(std::make_pair("lily", "32178"));
auto mapItor = phonebook.begin();
for (; mapItor != phonebook.end(); ++mapItor)
{
cout << "name= " << mapItor->first << ",number= " << mapItor->second << endl;
}
cout << "The number include mary count= " << phonebook.count("mary") << endl;
typedef multimap <string, string>::const_iterator constItor;
typedef pair<constItor, constItor> Range;
Range range = phonebook.equal_range("mary");
for (constItor itor = range.first; itor != range.second; ++itor)
{
cout << "name= " << itor->first << ",number= " << itor->second << endl;
}
return 0;
}
运行结果: