C++ 映射类型

示例

常规映射

映射是一个关联容器,包含键值对。

#include <string>
#include <map>
std::map<std::string, size_t> fruits_count;

在上面的示例中,std::string是类型,size_t是

键在映射中充当索引。每个密钥必须唯一,并且必须订购。

  • 如果您需要具有相同键的多重元素,请考虑使用multimap(如下所述)

  • 如果您的值类型未指定任何顺序,或者您想覆盖默认顺序,则可以提供以下一种:

    #include <string>
    #include <map>
    #include <cstring>
    struct StrLess {
       bool operator()(const std::string& a, const std::string& b) {
           return strncmp(a.c_str(), b.c_str(), 8)<0;
                  //仅比较最多8个首字符
       }
    }
    std::map<std::string, size_t, StrLess> fruits_count2;

    如果StrLess比较器返回false两个键,即使它们的实际内容不同,它们也被认为是相同的。

多映射

Multimap允许将具有相同键的多个键值对存储在映射中。否则,其界面和创建与常规映射非常相似。

 #include <string>
 #include <map>
 std::multimap<std::string, size_t> fruits_count;
 std::multimap<std::string, size_t, StrLess> fruits_count2;

哈希图(无序图)

哈希映射存储类似于常规映射的键/值对。但是,它不会根据键对元素进行排序。而是使用键的哈希值来快速访问所需的键值对。

#include <string>
#include <unordered_map>
std::unordered_map<std::string, size_t> fruits_count;

无序映射通常会更快,但是元素不会以任何可预测的顺序存储。例如,对中的所有元素进行迭代unordered_map会赋予看似随机的元素。