pair_make_pair

pair_make_pair (make_pair 함수)

이 페이지는 std::make_pair 함수에 대해 설명해요. 이 함수는 두 개의 인자를 받아 std::pair 객체를 생성하며, 인자의 타입으로부터 쌍의 타입을 자동으로 추론해요. C++11부터 이동 의미론을 지원하고, C++14부터 constexpr로 사용할 수 있어요.

출처: cppreference

본문

함수 시그니처

정의: 헤더
template < class T1 , class T2 > std :: pair < T1 , T2 > make_pair ( T1 x , T2 y ); (until C++11)
template < class T1 , class T2 > std :: pair < /*V1*/ , /*V2*/ > make_pair ( T1 && x , T2 && y ); (since C++11) (until C++20) (constexpr since C++14)
template < class T1 , class T2 > constexpr std :: pair < std :: unwrap_ref_decay_t < T1 > , std :: unwrap_ref_decay_t < T2 >> make_pair ( T1 && x , T2 && y ); (since C++20)

std::pair 객체를 생성하며, 인자의 타입으로부터 대상 타입을 추론해요.

C++11부터 C++20까지는 다음과 같이 타입을 결정해요. std::decay<T1>::typeU1, std::decay<T2>::typeU2라고 할 때, /*V1*//*V2*/는 다음과 같이 정의돼요. U1std::reference_wrapper<X>라면 /*V1*/X&이고, 그렇지 않으면 /*V1*/U1이에요. U2std::reference_wrapper<Y>라면 /*V2*/Y&이고, 그렇지 않으면 /*V2*/U2예요.

매개변수

x, y - 쌍을 구성할 값들이에요.

반환값

std :: pair < T1 , T2 > ( x , y ) (until C++11)
std :: pair < /*V1*/ , /*V2*/ > ( std :: forward < T1 > ( x ), std :: forward < T2 > ( y )) (since C++11) (until C++20)
std :: pair < std :: unwrap_ref_decay_t < T1 > , std :: unwrap_ref_decay_t < T2 >> ( std :: forward < T1 > ( x ), std :: forward < T2 > ( y )) (since C++20)

예제

#include <functional>
#include <iostream>
#include <utility>

int main()
{
    int n = 1;
    int a[5] = {1, 2, 3, 4, 5};
    
    // build a pair from two ints
    auto p1 = std::make_pair(n, a[1]);
    std::cout << "The value of p1 is "
              << '(' << p1.first << ", " << p1.second << ")\n";
    
    // build a pair from a reference to int and an array (decayed to pointer)
    auto p2 = std::make_pair(std::ref(n), a);
    n = 7;
    std::cout << "The value of p2 is "
              << '(' << p2.first << ", " << *(p2.second + 2) << ")\n";
}

출력:

The value of p1 is (1, 2)
The value of p2 is (7, 3)

결함 보고서

다음의 동작을 변경하는 결함 보고서는 이전에 발표된 C++ 표준에 소급 적용되었어요.

DR 적용 대상 발표된 동작 올바른 동작
LWG 181 C++98 매개변수 타입이 const-reference 타입이라 배열을 전달할 수 없었어요. 매개변수 타입을 값 타입으로 변경했어요.

더 알아보기 (Learn more)

cppreference