# std::hash(std::vector<bool>)

From cppreference.com
< cpp‎ | container‎ | vector bool

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>.

### 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 (C++11) | hash function object (class template)

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/container/vector_bool/hash&oldid=149607"