地图类型
常规地图
映射是一个关联容器,包含键值对。
#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
中的所有元素会以看似随机的顺序给出元素。