赞
踩
std::map
在 C++ 标准库中是一个有序关联容器,通过键值对存储数据。底层实现通常是一棵 红黑树(Red-Black Tree)。红黑树是一种自平衡二叉搜索树,通过旋转和颜色标记的方式保持树的平衡,从而保证在最坏情况下基本操作(如插入、删除和查找)的时间复杂度为 O(logn)。
std::unordered_map
(哈希表):
std::set
/std::multiset
:
std::set
专门用于存储唯一键的集合,而 std::map
是键值对。std::multiset
允许存储重复键。std::vector
or std::list
:
std::map
自动按照键排序,方便进行区间查询和有序数据处理。std::map
中是唯一的。除了基本的插入、删除和查找操作,std::map
还提供了一些有用的方法,如 find()
、lower_bound()
、upper_bound()
以及 equal_range()
,这些方法可以帮助在区间查询和范围操作中。
- #include <iostream>
- #include <map>
- #include <string>
-
- int main() {
- // 创建一个 std::map
- std::map<std::string, int> myMap;
-
- // 插入键值对
- myMap["apple"] = 3;
- myMap["banana"] = 5;
- myMap["orange"] = 7;
-
- // 遍历并打印 map 中的元素
- std::cout << "Map elements:" << std::endl;
- for (const auto& pair : myMap) {
- std::cout << pair.first << ": " << pair.second << std::endl;
- }
-
- // 查找某个键
- auto it = myMap.find("banana");
- if (it != myMap.end()) {
- std::cout << "Found banana with value: " << it->second << std::endl;
- } else {
- std::cout << "Banana not found." << std::endl;
- }
-
- // 删除某个键
- myMap.erase("orange");
-
- // 打印删除后的 map
- std::cout << "Map after erasing 'orange':" << std::endl;
- for (const auto& pair : myMap) {
- std::cout << pair.first << ": " << pair.second << std::endl;
- }
-
- // 使用 lower_bound 和 upper_bound
- myMap["grape"] = 10;
- myMap["peach"] = 15;
-
- auto lb = myMap.lower_bound("banana"); // 键>= "banana"的第一个元素
- auto ub = myMap.upper_bound("banana"); // 键> "banana"的第一个元素
-
- std::cout << "Lower bound for 'banana': " << lb->first << ": " << lb->second << std::endl;
- std::cout << "Upper bound for 'banana': " << ub->first << ": " << ub->second << std::endl;
-
- // 使用 equal_range
- auto range = myMap.equal_range("banana");
- std::cout << "Equal range for 'banana':" << std::endl;
- for (auto it = range.first; it != range.second; ++it) {
- std::cout << it->first << ": " << it->second << std::endl;
- }
-
- return 0;
- }
在上述示例中,我们展示了:
std::map
中的元素。lower_bound
和 upper_bound
进行范围操作。equal_range
获取某个键的范围(对于 std::map
,其实每个键的范围都是它自身,因为键是唯一的)。Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。