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