本文主要是介绍c++ map/multimap容器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在C++中,std::map
和 std::multimap
是两种关联容器,它们包含了可重复的(对于 multimap
)或唯一的(对于 map
)键值对。这些容器都根据它们的键自动排序,并允许非常快速地根据键查找、插入和删除元素。
map
std::map
是一个关联容器,它包含可以重复的键值对(但每个键必须是唯一的),并默认按照升序对键进行排序。
基本用法:
#include <iostream>
#include <map> int main() { std::map<int, std::string> myMap; // 插入元素 myMap[1] = "one"; myMap[2] = "two"; myMap[3] = "three"; // 遍历元素 for (const auto& pair : myMap) { std::cout << pair.first << ": " << pair.second << std::endl; } // 查找元素 auto it = myMap.find(2); if (it != myMap.end()) { std::cout << "Found " << it->first << ": " << it->second << std::endl; } return 0;
}
multimap
std::multimap
是一个关联容器,它包含可以重复的键值对,并默认按照升序对键进行排序。
基本用法:
#include <iostream> #include <map> int main() { std::multimap<int, std::string> myMultimap; // 插入元素 myMultimap.insert({1, "one"}); myMultimap.insert({2, "two"}); myMultimap.insert({2, "two again"}); // 注意:键可以重复 myMultimap.insert({3, "three"}); // 遍历元素 for (const auto& pair : myMultimap) { std::cout << pair.first << ": " << pair.second << std::endl; } // 查找元素(注意:对于multimap,find只返回第一个匹配的元素) auto range = myMultimap.equal_range(2); for (auto it = range.first; it != range.second; ++it) { std::cout << "Found " << it->first << ": " << it->second << std::endl; } return 0; }
在
std::multimap
(以及std::multiset
)中,equal_range
是一个特别有用的成员函数,用于查找具有给定键的所有元素的范围。由于multimap
允许键重复,因此单个键可能对应多个值。equal_range
返回一个pair
,其中pair.first
是指向第一个不小于(即等于或大于)给定键的元素的迭代器,而pair.second
是指向第一个大于给定键的元素的迭代器。因此,范围[pair.first, pair.second)
包含了所有键等于给定键的元素。
注意事项
- 默认情况下,
std::map
和std::multimap
使用std::less<Key>
作为比较对象,这会导致键按照升序排序。你可以通过提供自定义的比较对象来改变排序方式。 std::map
和std::multimap
的迭代器是双向迭代器,它们可以向前或向后遍历容器。- 插入、删除和查找操作在
std::map
和std::multimap
中的平均时间复杂度都是对数级别的(O(log n)),这使得它们在处理大量数据时非常高效。
这篇关于c++ map/multimap容器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!