std::hash<std::vector<bool>>
来自cppreference.com
<tbody>
</tbody>
| 在标头 <vector> 定义
|
||
template< class Allocator > struct hash<std::vector<bool, Allocator>>; |
(C++11 起) | |
std::hash 对 std::vector<bool> 的模板特化允许用户获得 std::vector<bool> 类型对象的散列。
示例
运行此代码
#include <iostream>
#include <unordered_set>
#include <vector>
using vb = std::vector<bool>;
vb to_vector_bool(unsigned n)
{
vb v;
do
{
v.push_back(n & 1);
n >>= 1;
}
while (n);
return v;
}
auto print(const vb& v, bool new_line = true)
{
for (std::cout << "{ "; const bool e : v)
std::cout << e << ' ';
std::cout << '}' << (new_line ? '\n' : ' ');
}
int main()
{
for (auto i{0U}; i != 8; ++i)
{
std::cout << std::hex << std::uppercase;
vb v = to_vector_bool(i);
std::cout << std::hash<vb>{}(v) << ' ' << std::dec;
print(v);
}
// 针对 vector<bool> 的 std::hash 使得可以将它们放在
// unordered_* 关联容器中,如 unordered_set。
std::unordered_set v{vb{0}, vb{0, 0}, vb{1}, vb{1}, vb{1, 0}, vb{1, 1}};
for (vb const& e : v)
print(e, 0);
std::cout << '\n';
}
可能的输出:
6D09EE26D5863619 { 0 }
3C27D9F591D20E49 { 1 }
E74D3F72B7599C63 { 0 1 }
EE3BE81F55123770 { 1 1 }
3AAD2A2EDBEC6C35 { 0 0 1 }
EB057F773CB64C43 { 1 0 1 }
6E1354730102BE00 { 0 1 1 }
E2E622597C18899D { 1 1 1 }
{ 1 1 } { 1 0 } { 1 } { 0 0 } { 0 }
参阅
(C++11) |
散列函数对象 (类模板) |