C++ 中哪些 STL 类型可以作为 map 或 unordered_map 的键?
其实是在问哪些类型有 hash 函数和重载了 < 比较操作符。因为说的是 STL,所以不考虑内建类型。
可哈希和 == 比较
常见的可以哈希和 == 比较的集合类型有(以下省略 std 命名空间):
string/string_viewbitsetunique_ptr/shared_ptr
这样的标准库模板类其实非常少!通常,可以用于 hash 和相等的类型都能用于 < 比较。
注意 map 和 set 通常不可哈希!包括:
flat_map/flat_set(C++23)map/setunordered_map/unordered_set
可 < 比较
常见的可以用于 < 比较的集合类型除了
可哈希和 == 比较 给出的几个类型之外 ,还有:
vectorpair/tuple/array(array和pair都可以看成是特殊的tuple)deque/queue/stack(不包括priority_queue)list/forward_listmap/set