Namespaces
Variants

deduction guides for std::multiset

From cppreference.net

(Примечание: В данном фрагменте HTML отсутствует текстовое содержимое для перевода - присутствуют только HTML-теги и атрибуты, которые согласно инструкциям не подлежат переводу)
Определено в заголовочном файле <set>
template <

class InputIt,
class Comp = std:: less < typename std:: iterator_traits < InputIt > :: value_type > ,
class Alloc = std:: allocator < typename std:: iterator_traits < InputIt > :: value_type >>
multiset ( InputIt, InputIt, Comp = Comp ( ) , Alloc = Alloc ( ) )

- > multiset < typename std:: iterator_traits < InputIt > :: value_type , Comp, Alloc > ;
(1) (начиная с C++17)
template <

class Key, class Comp = std:: less < Key > ,
class Alloc = std:: allocator < Key > >
multiset ( std:: initializer_list < Key > , Comp = Comp ( ) , Alloc = Alloc ( ) )

- > multiset < Key, Comp, Alloc > ;
(2) (начиная с C++17)
template < class InputIt, class Alloc >

multiset ( InputIt, InputIt, Alloc )
- > multiset < typename std:: iterator_traits < InputIt > :: value_type ,

std:: less < typename std:: iterator_traits < InputIt > :: value_type > , Alloc > ;
(3) (начиная с C++17)
template < class Key, class Alloc >

multiset ( std:: initializer_list < Key > , Alloc )

- > multiset < Key, std:: less < Key > , Alloc > ;
(4) (начиная с C++17)
template < ranges:: input_range R, class Compare = less < ranges:: range_value_t < R >> ,

class Alloc = std:: allocator < ranges:: range_value_t < R >> >
multiset ( std:: from_range_t , R && , Compare = Compare ( ) , Alloc = Alloc ( ) )

- > multiset < ranges:: range_value_t < R > , Compare, Alloc > ;
(5) (начиная с C++23)
template < ranges:: input_range R, class Alloc >

multiset ( std:: from_range_t , R && , Alloc )

- > multiset < ranges:: range_value_t < R > , std:: less < ranges:: range_value_t < R >> , Alloc > ;
(6) (начиная с C++23)
1-4) Эти deduction guides предоставлены для multiset чтобы позволить выведение из диапазона итераторов (перегрузки (1,3) ) и std::initializer_list (перегрузки (2,4) ).
5,6) Эти направляющие вывода предоставлены для multiset чтобы позволить вывод из тега std::from_range_t и input_range .

Эти перегрузки участвуют в разрешении перегрузки только если InputIt удовлетворяет требованиям LegacyInputIterator , Alloc удовлетворяет требованиям Allocator , и Comp не удовлетворяет требованиям Allocator .

Примечание: степень, в которой библиотека определяет, что тип не удовлетворяет требованиям LegacyInputIterator , не специфицирована, за исключением того, что как минимум целочисленные типы не квалифицируются как входные итераторы. Аналогично, степень, в которой она определяет, что тип не удовлетворяет требованиям Allocator , не специфицирована, за исключением того, что как минимум тип-член Alloc::value_type должен существовать и выражение std:: declval < Alloc & > ( ) . allocate ( std:: size_t { } ) должно быть корректным при рассмотрении как невычисляемый операнд.

Примечания

Feature-test macro Value Std Feature
__cpp_lib_containers_ranges 202202L (C++23) Ranges-aware construction and insertion; overload (5,6)

Пример

#include <set>
int main()
{
    // руководство #2 выводит std::multiset<int>
    std::multiset s = {1, 2, 3, 4};
    // руководство #1 выводит std::multiset<int>
    std::multiset s2(s.begin(), s.end());
}