Namensräume
Varianten
Aktionen

deduction guides für std::unordered_multiset

Von cppreference.com
 
 
 
 
Definiert in Header <unordered_set>
template<

    class InputIt,
    class Hash = std::hash<typename std::iterator_traits<InputIt>::value_type>,
    class Pred = std::equal_to<typename std::iterator_traits<InputIt>::value_type>,
    class Alloc = std::allocator<typename std::iterator_traits<InputIt>::value_type> >
unordered_multiset( InputIt, InputIt,
                    typename /* siehe unten */::size_type = /* siehe unten */,
                    Hash = Hash(), Pred = Pred(), Alloc = Alloc() )
    -> unordered_multiset<typename std::iterator_traits<InputIt>::value_type,

                          Hash, Pred, Alloc>;
(1) (seit C++17)
template< class T,

          class Hash = std::hash<T>,
          class Pred = std::equal_to<T>,
          class Alloc = std::allocator<T> >
unordered_multiset( std::initializer_list<T>,
                    typename /* siehe unten */::size_type = /* siehe unten */,
                    Hash = Hash(), Pred = Pred(), Alloc = Alloc() )

    -> unordered_multiset<T, Hash, Pred, Alloc>;
(2) (seit C++17)
template< class InputIt, class Alloc >

unordered_multiset( InputIt, InputIt, typename /* siehe unten */::size_type, Alloc )
    -> unordered_multiset<typename std::iterator_traits<InputIt>::value_type,
                          std::hash<typename std::iterator_traits<InputIt>::value_type>,
                          std::equal_to<typename std::iterator_traits<InputIt>::value_type>,

                          Alloc>;
(3) (seit C++17)
template< class InputIt, class Hash, class Alloc >

unordered_multiset( InputIt, InputIt, typename /* siehe unten */::size_type, Hash, Alloc )
    -> unordered_multiset<typename std::iterator_traits<InputIt>::value_type, Hash,
                          std::equal_to<typename std::iterator_traits<InputIt>::value_type>,

                          Alloc>;
(4) (seit C++17)
template< class T, class Alloc >

unordered_multiset( std::initializer_list<T>, typename /* siehe unten */::size_type, Alloc )

    -> unordered_multiset<T, std::hash<T>, std::equal_to<T>, Alloc>;
(5) (seit C++17)
template< class T, class Hash, class Alloc >

unordered_multiset( std::initializer_list<T>, typename /* siehe unten */::size_type,
                    Hash, Alloc )

    -> unordered_multiset<T, Hash, std::equal_to<T>, Alloc>;
(6) (seit C++17)
template< ranges::input_range R,

          class Hash = std::hash<ranges::range_value_t<R>>,
          class Pred = std::equal_to<ranges::range_value_t<R>>,
          class Alloc = std::allocator<ranges::range_value_t<R>> >
unordered_multiset( std::from_range_t, R&&,
                    typename /* siehe unten */::size_type = /* siehe unten */,
                    Hash = Hash(), Pred = Pred(), Alloc = Alloc() )

    -> unordered_multiset<ranges::range_value_t<R>, Hash, Pred, Alloc>;
(7) (seit C++23)
template< ranges::input_range R, class Alloc >

unordered_multiset( std::from_range_t, R&&,
                    typename /* siehe unten */::size_type, Alloc )
    -> unordered_multiset<ranges::range_value_t<R>, hash<ranges::range_value_t<R>>,

                          std::equal_to<ranges::range_value_t<R>>, Alloc>;
(8) (seit C++23)
template< ranges::input_range R, class Alloc >

unordered_multiset( std::from_range_t, R&&, Alloc )
    -> unordered_multiset<ranges::range_value_t<R>, hash<ranges::range_value_t<R>>,

                          std::equal_to<ranges::range_value_t<R>>, Alloc>;
(9) (seit C++23)
template< ranges::input_range R, class Hash, class Alloc >

unordered_multiset( std::from_range_t, R&&,
                    typename /* siehe unten */::size_type, Hash, Alloc )
    -> unordered_multiset<ranges::range_value_t<R>, Hash,

                          std::equal_to<ranges::range_value_t<R>>, Alloc>;
(10) (seit C++23)
1-6) Diese deduction guides werden für unordered_multiset bereitgestellt, um die Deduktion aus einem Iterator-Bereich (Überladungen (1,3,4)) und std::initializer_list (Überladungen (2,5,6)) zu ermöglichen. Diese Überladung nimmt nur an der Auflösungsfindung teil, wenn InputIt LegacyInputIterator erfüllt, Alloc Allocator erfüllt, weder Hash noch Pred Allocator erfüllen und Hash kein integraler Typ ist.
7-10) Diese deduction guides werden für unordered_multiset bereitgestellt, um die Deduktion aus einem std::from_range_t-Tag und einem input_range zu ermöglichen.

Hinweis: Der Umfang, bis zu dem die Bibliothek feststellt, dass ein Typ LegacyInputIterator nicht erfüllt, ist nicht spezifiziert, außer dass als Minimum integrale Typen nicht als Eingabe-Iteratoren qualifizieren. Ebenso ist der Umfang, bis zu dem sie feststellt, dass ein Typ Allocator nicht erfüllt, nicht spezifiziert, außer dass als Minimum der Member-Typ Alloc::value_type existieren muss und der Ausdruck std::declval<Alloc&>().allocate(std::size_t{}) gutgeformt sein muss, wenn er als nicht ausgewerteter Operand behandelt wird.

Der Parameter `size_type` in diesen Guides bezieht sich auf den `size_type`-Member-Typ des Typs, der vom Deduction Guide abgeleitet wird.

[bearbeiten] Anmerkungen

Feature-Test-Makro Wert Std Feature
__cpp_lib_containers_ranges 202202L (C++23) Bereichsweise Konstruktion und Einfügung; Überladungen (7-10)

[bearbeiten] Beispiel

#include <unordered_set>
 
int main()
{
    // guide #2 deduces std::unordered_multiset<int>
    std::unordered_multiset s = {1, 2, 3, 4};
 
    // guide #1 deduces std::unordered_multiset<int>
    std::unordered_multiset s2(s.begin(), s.end());
}