.. SPDX-FileCopyrightText: 2019-2021 Intel Corporation .. .. SPDX-License-Identifier: CC-BY-4.0 ================ Deduction guides ================ If possible, ``concurrent_unordered_multiset`` constructors support class template argument deduction (since C++17). Copy and move constructors, including constructors with an explicit ``allocator_type`` argument, provide implicitly-generated deduction guides. In addition, the following explicit deduction guides are provided: .. code:: cpp template >, typename KeyEqual = std::equal_to>, typename Allocator = tbb::tbb_allocator>> concurrent_unordered_multiset( InputIterator, InputIterator, set_size_type = {}, Hash = Hash(), KeyEqual = KeyEqual(), Allocator = Allocator() ) -> concurrent_unordered_multiset, Hash, KeyEqual, Allocator>; template concurrent_unordered_multiset( InputIterator, InputIterator, set_size_type, Allocator ) -> concurrent_unordered_multiset, std::hash>, std::equal_to>, Allocator>; template , typename KeyEqual = std::equal_to, typename Allocator = tbb::tbb_allocator> concurrent_unordered_multiset( std::initializer_list, set_size_type = {}, Hash = Hash(), KeyEqual = KeyEqual(), Allocator = Allocator() ) -> concurrent_unordered_multiset; template concurrent_unordered_multiset( std::initializer_list, set_size_type, Allocator ) -> concurrent_unordered_multiset, std::equal_to, Allocator>; template concurrent_unordered_multiset( std::initializer_list, Allocator ) -> concurrent_unordered_multiset, std::equal_to, Allocator>; template concurrent_unordered_multiset( std::initializer_list, set_size_type, Hash, Allocator ) -> concurrent_unordered_multiset, Allocator>; Where the ``set_size_type`` type refers to the ``size_type`` member type of the deduced ``concurrent_unordered_multiset`` and the type alias ``iterator_value_t`` is defined as follows: .. code:: cpp template using iterator_value_t = typename std::iterator_traits::value_type; These deduction guides only participate in the overload resolution if the following requirements are met: * The ``InputIterator`` type meets the ``InputIterator`` requirements described in the [input.iterators] section of the ISO C++ Standard. * The ``Allocator`` type meets the ``Allocator`` requirements described in the [allocator.requirements] section of the ISO C++ Standard. * The ``Hash`` type does not meet the ``Allocator`` requirements. * The ``KeyEqual`` type does not meet the ``Allocator`` requirements. **Example** .. code:: cpp #include #include #include struct CustomHasher {...}; int main() { std::vector v; // Deduces s1 as concurrent_unordered_multiset oneapi::tbb::concurrent_unordered_multiset s1(v.begin(), v.end()); // Deduces s2 as concurrent_unordered_multiset; oneapi::tbb::concurrent_unordered_multiset s2(v.begin(), v.end(), CustomHasher{}); }