.. SPDX-FileCopyrightText: 2019-2020 Intel Corporation .. .. SPDX-License-Identifier: CC-BY-4.0 ================ Deduction guides ================ Where possible, constructors of ``concurrent_unordered_map`` support class template argument deduction (since C++17): .. code:: cpp template >, typename KeyEqual = std::equal_to>, typename Allocator = tbb_allocator>> concurrent_unordered_map( InputIterator, InputIterator, map_size_type = /*implementation_defined*/, Hash = Hash(), KeyEqual = KeyEqual(), Allocator = Allocator() ) -> concurrent_unordered_map, iterator_mapped_t, Hash, KeyEqual, Allocator>; template concurrent_unordered_map( InputIterator, InputIterator, map_size_type, Allocator ) -> concurrent_unordered_map, iterator_mapped_t, std::hash>, std::equal_to>, Allocator>; template concurrent_unordered_map( InputIterator, InputIterator, Allocator ) -> concurrent_unordered_map, iterator_mapped_t, std::hash>, std::equal_to>, Allocator>; template concurrent_unordered_map( InputIterator, InputIterator, Hash, Allocator ) -> concurrent_unordered_map, iterator_mapped_t, Hash, std::equal_to>, Allocator>; template , typename KeyEqual = std::equal_to, typename Allocator = tbb_allocator>> concurrent_unordered_map( std::initializer_list, map_size_type = /*implementation-defined*/, Hash = Hash(), KeyEqual = KeyEqual(), Allocator = Allocator() ) -> concurrent_unordered_map; template concurrent_unordered_map( std::initializer_list, map_size_type, Allocator ) -> concurrent_unordered_map, std::equal_to, Allocator>; template concurrent_unordered_map( std::initializer_list, map_size_type, Hash, Allocator ) -> concurrent_unordered_map, Allocator>; where the type ``map_size_type`` refers to the ``size_type`` member type of the deduced ``concurrent_unordered_map`` and the type aliases ``iterator_key_t``, ``iterator_mapped_t``, and ``iterator_alloc_value_t`` are defined as follows: .. code:: cpp template using iterator_key_t = std::remove_const_t::value_type::first_type>; template using iterator_mapped_t = typename std::iterator_traits::value_type::second_type; template using iterator_alloc_value_t = std::pair, iterator_mapped_t>>; **Example** .. code:: cpp #include #include #include struct CustomHasher {...}; int main() { std::vector> v; // Deduces m1 as concurrent_unordered_map tbb::concurrent_unordered_map m1(v.begin(), v.end()); // Deduces m2 as concurrent_unordered_map; tbb::concurrent_unordered_map m2(v.begin(), v.end(), CustomHasher{}); }