multimap
multimap 容器也用于存储 pair<const K, T> 类型的键值对(其中 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 的键值对。