multimap
- multimap 容器也用于存储 pair 类型的键值对(其中 K 表示键的类型,T 表示值的类型)
- 其中各个键值对的键不能做修改;该容器也会自行根据键的大小对存储的所有键值对做排序操作。
- 和 map 容器的区别在于,multimap 容器中可以同时存储多(≥2)个键相同的键值对。
std::multimap<std::string, std::string> map1{
{"k1","v1"},
{"k2","v2"},
{"k3","v3"},
};
multimap<string, string>mymultimap{
pair<string,string>{"C语言教程", "http://c.biancheng.net/c/"},
pair<string,string>{ "Python教程", "http://c.biancheng.net/python/"},
pair<string,string>{ "STL教程", "http://c.biancheng.net/stl/"}
};
multimap<string, string>mymultimap{
make_pair("C语言教程", "http://c.biancheng.net/c/"),
make_pair("Python教程", "http://c.biancheng.net/python/"),
make_pair("STL教程", "http://c.biancheng.net/stl/")
};
multimap<string, string>newmultimap(mymultimap);
multimap模版参数
- multimap 类模板共可以接收 4 个参数,其中第 3 个参数可用来修改 multimap 容器内部的排序规则
template < class Key,
class T,
class Compare = less<Key>,
class Alloc = allocator<pair<const Key,T> >
> class multimap;
- 如下面进行降序操作,默认是升序
std::multimap<char, int, std::greater<char>> map3{
{'a', 1},
{'b', 2}
}
注意
- 和 map 容器相比,multimap 未提供 at() 成员方法,也没有重载 [] 运算符。这意味着,map 容器中通过指定键获取指定指定键值对的方式,将不再适用于 multimap 容器。其实这很好理解,因为 multimap 容器中指定的键可能对应多个键值对,而不再是 1 个。
std::multimap<char, int> map1{
{'c', 10},
{'b', 20},
{'b', 15},
{'a', 30}
};
std::cout<< "map1.count('b') = " << map1.count('b') << std::endl;
for (auto it = map1.begin(); it != map1.end(); ++it) {
std::cout << it->first << " "<< it->second << std::endl;
}
auto it1 = map1.find('b');
std::cout << it1->first << " "<< it1->second << std::endl;
auto it2 = map1.upper_bound('b');
std::cout << it2->first << " "<< it2->second << std::endl;
auto it3 = map1.lower_bound('b');
std::cout << it3->first << " "<< it3->second << std::endl;
auto p1 = map1.equal_range('b');
for (auto it = p1.first; it != p1.second; ++it) {
std::cout << it->first << " "<< it->second << std::endl;
}
说明
- find(key), 在 multimap 容器中查找首个键为 key 的键值对,如果成功找到,则返回指向该键值对的双向迭代器;反之,则返回和 end() 方法一样的迭代器。
- lower_bound(key) 返回一个指向当前 multimap 容器中第一个大于或等于 key 的键值对的双向迭代器。如果 multimap 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。
- upper_bound(key) 返回一个指向当前 multimap 容器中第一个大于 key 的键值对的迭代器。
- equal_range(key) 该方法返回一个 pair 对象(包含 2 个双向迭代器),其中 pair.first 和 lower_bound() 方法的返回值等价,pair.second 和 upper_bound() 方法的返回值等价。也就是说,该方法将返回一个范围,该范围中包含的键为 key 的键值对。