PS에서 사용하는 C++ STL - 초급 (pair)

2021. 8. 29. 05:19알고리즘 문제풀기/코딩

도입

std::pair는 원소 두 개짜리 구조체예요. 2차원 평면 상의 점, 수직선 상의 구간, 선분의 양 끝점 등, 두 개로 묶는 자료 구조를 간편하게 사용할 수 있어요.

사용하기

아래와 같이 헤더 파일을 인클루드합니다.

#include <utility>

사용 예시를 볼게요.

#include <iostream>
#include <utility>
using namespace std;

int main()
{
    pair<int,int> p;
    p.first = 3;
    p.second = 4;
    cout << p.first << ' ' << p.second << '\n'; // prints: 3 4
    return 0;
}

firstsecond, 이 두 멤버 변수 각각에 값을 저장하고 가져와 사용할 수 있어요. 꺾쇠 안에 들어간 두 타입(intint)가 각각 firstsecond의 타입입니다.

대입 연산자를 쓰면 한 번에 값을 옮길 수 있어요.

#include <iostream>
#include <utility>
using namespace std;

int main()
{
    pair<int,int> p;
    p.first = 3;
    p.second = 4;

    pair<int,int> q;
    q = p;

    cout << q.first << ' ' << q.second << '\n'; // prints: 3 4
    return 0;
}

함수 내의 로컬 변수로 선언해도 값이 0으로 초기화됩니다.

#include <iostream>
#include <utility>
using namespace std;

int main()
{
    pair<int,int> p;  // p = {0, 0}, automatically
    p.first += 3;     // p.first: was 0 -> 3 now

    cout << p.first << ' ' << p.second << '\n'; // prints: 3 0
    return 0;
}

초기값도 물론 설정 가능해요. 아래의 예시에서 알 수 있듯 중괄호와 소괄호 모두 사용 가능합니다.

#include <iostream>
#include <utility>
using namespace std;

int main()
{
    pair<int,int> p{9, 7};
    cout << p.first << ' ' << p.second << '\n'; // prints: 9 7
    pair<int,int> q(8, 3);
    cout << q.first << ' ' << q.second << '\n'; // prints: 8 3
    return 0;
}

마지막으로, 서로 다른 타입도 묶을 수 있어요!

#include <iostream>
#include <utility>
using namespace std;

int main()
{
    pair<int,char> p{9, 'a'};
    cout << p.first << ' ' << p.second << '\n'; // prints: 9 a
    pair<char, double> q('x', 2.3);
    cout << q.first << ' ' << q.second << '\n'; // prints: x 2.3
    return 0;
}