写点什么

C++ STL 库 map

  • 2024-09-15
    四川
  • 本文字数:975 字

    阅读完需:约 3 分钟

C++ STL库map

C++标准模板库(STL)的 map 是一种关联容器,它存储的元素是键值对,键唯一,值可以重复。map 的内部实现是一种平衡二叉搜索树(红黑树),这使得它的查找、插入、删除操作的时间复杂度都是 O(log n)。

map 的主要优点是,它能够快速地根据键查找对应的值。这是因为 map 的内部实现保证了元素始终是排序的,因此可以使用二分查找算法。这与其他的顺序容器(如 vector 和 list)不同,它们的查找操作的时间复杂度是 O(n)。

你可以使用 map 的 insert 成员函数来插入元素。insert 函数的参数是一个 std::pair 对象,其中第一个元素是键,第二个元素是值。例如:

std::map<int, std::string> m;m.insert(std::make_pair(1, "one"));
复制代码

如果你试图插入一个已经存在的键,map 不会替换旧的值,而是忽略新的插入。如果你想要替换一个已经存在的键的值,你可以使用下标操作符[]。例如:

m[1] = "uno";
复制代码

你也可以使用下标操作符[]来插入新的键值对。如果键不存在,map 会创建一个新的键值对,值是该类型的默认值。然后返回对应的值的引用,你可以使用这个引用来修改值。例如:

m[2] = "two";
复制代码

你可以使用 find 成员函数来查找一个键。find 函数的参数是一个键,如果找到,它返回一个指向键值对的迭代器。如果没找到,它返回 map::end。例如:

auto it = m.find(1);if (it != m.end()) {    std::cout << it->second << std::endl;}
复制代码

你可以使用 erase 成员函数来删除一个键。erase 函数的参数是一个键或一个指向键值对的迭代器。例如:

m.erase(1);
复制代码

你可以使用 begin 和 end 成员函数来获取指向 map 首元素和尾元素后一位置的迭代器,然后使用这些迭代器来遍历 map。例如:

for (auto it = m.begin(); it != m.end(); ++it) {    std::cout << it->first << ": " << it->second << std::endl;}
复制代码

或者使用 C++11 引入的范围 for 循环:

for (const auto& p : m) {    std::cout << p.first << ": " << p.second << std::endl;}
复制代码

总的来说,map 是一个非常强大的数据结构,它提供了快速查找的能力,同时也支持高效的插入和删除操作。这使得它在许多情况下都是理想的选择,特别是当你需要根据键快速查找值的时候。


蓝易云-五网CN2服务器【点我购买】蓝易云采用KVM高性能架构,稳定可靠,安全无忧!蓝易云服务器真实CN2回国线路,不伪造,只做高质量海外服务器。



海外免备案云服务器链接:www.tsyvps.com

蓝易云香港五网 CN2 GIA/GT 精品网络服务器。拒绝绕路,拒绝不稳定。

用户头像

百度搜索:蓝易云 2023-07-05 加入

香港五网CN2免备案服务器

评论

发布
暂无评论
C++ STL库map_百度搜索:蓝易云_InfoQ写作社区