std::hash>(3)

NAME
std::hash> - std::hash>

Synopsis
   Defined in header <vector>
   template< class Allocator > (since C++11)
   struct hash<std::vector<bool, Allocator>>;
   The template specialization of std::hash for std::vector<bool> allows users to
   obtain hashes of objects of type std::vector<bool>.

Example
// Run this code
 #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);
     std::cout << '\n';
 }

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 }

See also
   hash hash function object
   (C++11) (class template)