std::hash(std::vector)(3)

NAME
std::hash(std::vector) - std::hash(std::vector)

Synopsis
   template <class Allocator> struct hash<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>.

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);
     }
 }

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)