Defined in header <vector> | ||
---|---|---|
template< class Allocator > struct hash<std::vector<bool, Allocator>>; | (since C++11) |
The template specialization of std::hash
for std::vector<bool>
allows users to obtain hashes of objects of type 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); } // std::hash for vector<bool> makes it possible to keep them in // unordered_* associative containers, such as 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); }
Possible output:
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) | hash function object (class template) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/container/vector_bool/hash