提示信息

C++ 中使用 map 和 unordered_map 的方法探索

吹落 已关注

在 C++ 中,mapunordered_map 是标准库中的两种关联容器,用于存储键值对。两者的主要区别在于底层实现和访问速度,以及元素存储的顺序。以下是它们的用法及一些特性探索:

map

  1. 定义

    1. #include <map>
    2. std::map<int, std::string> myMap;
  2. 特性

    • 底层实现是红黑树。
    • 元素是按照键值自动排序的。
    • 查找、插入、删除时间复杂度为 O(log n)。
  3. 基本操作

    • 插入元素
      myMap.insert({1, "one"}); myMap[2] = "two";
    • 访问元素
      std::string value = myMap[1]; // 如果键不存在,默认构造一个元素
    • 查找元素
      auto it = myMap.find(1); if (it != myMap.end()) { // 键存在 }
    • 删除元素
      myMap.erase(1);
  4. 迭代

    1. for (const auto& pair : myMap) {
    2. std::cout << pair.first << ": " << pair.second << std::endl;
    3. }

unordered_map

  1. 定义

    1. #include <unordered_map>
    2. std::unordered_map<int, std::string> myUnorderedMap;
  2. 特性

    • 底层实现是哈希表。
    • 元素不是按特定顺序存储,存储顺序可能和插入顺序不同。
    • 查找、插入、删除时间复杂度平均为 O(1),但最坏情况下为 O(n)。
  3. 基本操作

    • 插入元素
      myUnorderedMap.insert({1, "one"}); myUnorderedMap[2] = "two";
    • 访问元素
      std::string value = myUnorderedMap[1];
    • 查找元素
      auto it = myUnorderedMap.find(1); if (it != myUnorderedMap.end()) { // 键存在 }
    • 删除元素
      myUnorderedMap.erase(1);
  4. 迭代

    1. for (const auto& pair : myUnorderedMap) {
    2. std::cout << pair.first << ": " << pair.second << std::endl;
    3. }

选择使用指南

  • 使用 map

    • 需要按顺序访问元素。
    • 对元素的稳定排序有要求。
  • 使用 unordered_map

    • 关心操作的平均速度,希望达到最快的查找和插入性能。
    • 对元素顺序没有要求。

在选择哪个容器时,需要根据应用场景决定,如果需要有序数据、并且对性能要求不特别高,可以选择 map;如果需要最快速的查找和插入,并且数据顺序不重要,可以选择 unordered_map

    遇到难题? "AI大模型GPT4.0、GPT" 是你的私人解答专家! 点击按钮去提问......
吹落 关注 已关注

最近一次登录:2024-11-20 23:29:44   

暂时还没有签名,请关注我或评论我的文章
×
免费图表工具,画流程图、架构图