Namespaces
Variants

deduction guides for std::priority_queue

From cppreference.net
헤더에 정의됨 <queue>
template < class Comp, class Container >

priority_queue ( Comp, Container )

- > priority_queue < typename Container :: value_type , Container, Comp > ;
(1) (C++17부터)
template < class InputIt,

class Comp = std:: less < /*iter-val-t*/ < InputIt >> ,
class Container = std:: vector < /*iter-val-t*/ < InputIt > >
priority_queue ( InputIt, InputIt, Comp = Comp ( ) , Container = Container ( ) )

- > priority_queue < /*iter-val-t*/ < InputIt > , Container, Comp > ;
(2) (C++17부터)
template < class Comp, class Container, class Alloc >

priority_queue ( Comp, Container, Alloc )

- > priority_queue < typename Container :: value_type , Container, Comp > ;
(3) (C++17부터)
template < class InputIt, class Alloc >

priority_queue ( InputIt, InputIt, Alloc )
- > priority_queue < /*iter-val-t*/ < InputIt > ,
std:: vector < /*iter-val-t*/ < InputIt > , Alloc > ,

std:: less < /*iter-val-t*/ < InputIt >>> ;
(4) (C++17부터)
template < class InputIt, class Comp, class Alloc >

priority_queue ( InputIt, InputIt, Comp, Alloc )
- > priority_queue < /*iter-val-t*/ < InputIt > ,

std:: vector < /*iter-val-t*/ < InputIt > , Alloc > , Comp > ;
(5) (C++17 이후)
template < class InputIt, class Comp, class Container, class Alloc >

priority_queue ( InputIt, InputIt, Comp, Container, Alloc )

- > priority_queue < typename Container :: value_type , Container, Comp > ;
(6) (C++17부터)
template < ranges:: input_range R,

class Comp = std:: less < ranges:: range_value_t < R >> >
priority_queue ( std:: from_range_t , R && , Comp = Comp ( ) )
- > priority_queue < ranges:: range_value_t < R > ,

std:: vector < ranges:: range_value_t < R >> , Comp > ;
(7) (C++23 이후)
template < ranges:: input_range R, class Comp, class Alloc >

priority_queue ( std:: from_range_t , R && , Comp, Alloc )
- > priority_queue < ranges:: range_value_t < R > ,

std:: vector < ranges:: range_value_t < R > , Alloc > , Comp > ;
(8) (C++23부터)
template < ranges:: input_range R, class Alloc >

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

std:: vector < ranges:: range_value_t < R > , Alloc >> ;
(9) (C++23부터)
설명 전용 헬퍼 타입 별칭
template < class InputIt >

using /*iter-val-t*/ =

typename std:: iterator_traits < InputIt > :: value_type ;
( 설명 전용* )

다음 deduction guides std::priority_queue 에 제공됩니다:

1-6) 기본 컨테이너 유형과 반복자 범위로부터의 추론을 허용합니다.
7-9) std::from_range_t 태그와 input_range 로부터의 추론을 허용합니다.

이러한 오버로드는 다음 조건에서만 오버로드 해결에 참여합니다.

참고: 라이브러리가 특정 타입이 LegacyInputIterator 요구사항을 만족하지 않는다고 판단하는 범위는 명시되지 않았으나, 최소한 정수 타입들은 입력 반복자로 적합하지 않습니다. 마찬가지로, 특정 타입이 Allocator 요구사항을 만족하지 않는다고 판단하는 범위도 명시되지 않았으나, 최소한 멤버 타입 Alloc::value_type 이 존재해야 하며 std:: declval < Alloc & > ( ) . allocate ( std:: size_t { } ) 표현식이 평가되지 않은 피연산자로 취급될 때 유효하게 형성되어야 합니다.

참고 사항

기능 테스트 매크로 표준 기능
__cpp_lib_containers_ranges 202202L (C++23) Ranges-aware 생성 및 삽입; 오버로드 ( 7-9 )

예제

#include <functional>
#include <iostream>
#include <queue>
#include <vector>
int main()
{
    const std::vector<int> v = {1, 2, 3, 4};
    std::priority_queue pq1{std::greater<int>{}, v}; // deduces std::priority_queue<
                                                     //     int, std::vector<int>,
                                                     //     std::greater<int>>
    for (; !pq1.empty(); pq1.pop())
        std::cout << pq1.top() << ' ';
    std::cout << '\n';
    std::priority_queue pq2{v.begin(), v.end()}; // deduces std::priority_queue<int>
    for (; !pq2.empty(); pq2.pop())
        std::cout << pq2.top() << ' ';
    std::cout << '\n';
}

출력:

1 2 3 4
4 3 2 1

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 3506 C++17 반복자와 할당자로부터의 추론 가이드가 누락됨 추가됨, ( 4-6 )