multimap
- multimap 容器也用于存储 pair<const K, T> 类型的键值对(其中 K 表示键的类型,T 表示值的类型)
- 其中各个键值对的键不能做修改;该容器也会自行根据键的大小对存储的所有键值对做排序操作。
- 和 map 容器的区别在于,multimap 容器中可以同时存储多(≥2)个键相同的键值对。
//,使用此方式初始化 multimap 容器时,其底层会先将每一个{key, value}创建成 pair 类型的键值对,然后再用已建好的各个键值对初始化 multimap 容器。
std::multimap<std::string, std::string> map1{
{"k1","v1"},
{"k2","v2"},
{"k3","v3"},
};
//借助 pair 类模板的构造函数来生成各个pair类型的键值对
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/"}
};
//调用 make_pair() 函数,生成键值对元素
//创建并初始化 multimap 容器
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, // 指定键(key)的类型
class T, // 指定值(value)的类型
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}
}
//默认是std::less<char>
注意
- 和 map 容器相比,multimap 未提供 at() 成员方法,也没有重载 [] 运算符。这意味着,map 容器中通过指定键获取指定指定键值对的方式,将不再适用于 multimap 容器。其实这很好理解,因为 multimap 容器中指定的键可能对应多个键值对,而不再是 1 个。
std::multimap<char, int> map1{
{'c', 10},
{'b', 20},
{'b', 15},
{'a', 30}
};
//1. count
std::cout<< "map1.count('b') = " << map1.count('b') << std::endl;
//map1.count('b') = 2
//2. 遍历
for (auto it = map1.begin(); it != map1.end(); ++it) {
std::cout << it->first << " "<< it->second << std::endl;
}
/*
a 30
b 20
b 15
c 10
*/
//3. find
auto it1 = map1.find('b');
std::cout << it1->first << " "<< it1->second << std::endl;
//b 20
//4. lower/upper_bound
auto it2 = map1.upper_bound('b');
std::cout << it2->first << " "<< it2->second << std::endl;
//c 10
auto it3 = map1.lower_bound('b');
std::cout << it3->first << " "<< it3->second << std::endl;
//b 20
//5.equal_range
auto p1 = map1.equal_range('b');
for (auto it = p1.first; it != p1.second; ++it) {
std::cout << it->first << " "<< it->second << std::endl;
}
/*
b 20
b 15
*/
说明
- 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 的键值对。
文章来源地址https://www.toymoban.com/news/detail-656362.html
文章来源:https://www.toymoban.com/news/detail-656362.html
到了这里,关于面试之快速学习STL-multimap的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!