映射是一个关联容器,包含键值对。
#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会赋予看似随机的元素。