地图类型

常规地图

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

#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;
                   //compare only up to 8 first characters
        }
    }
    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 中的所有元素会以看似随机的顺序给出元素。