[C++문법] STL pair, tuple

KwangYong·2021년 11월 11일
0

C++

목록 보기
3/3

pair

BFS를 사용할때 큐에 좌표를 넣어야 하는데, 이때 STL pair를 쓸거다.

#include <bits/stdc++.h>
using namespace std;

int main(void){
  pair<int,int> t1 = make_pair(10, 13);
  pair<int,int> t2 = {4, 6}; // C++11
  cout << t2.first << ' ' << t2.second << '\n'; // 4 6
  if(t2 < t1) cout << "t2 < t1"; // t2 < t1
}

make_pair를 이용해서 값을 넣어줄 수도 있고 C++11이상부터는 그냥 중괄호를 써서 쉽게 넣어줄 수 있다. 값의 접근은 각각 first, second를 부름으로서 가능하고 또 pair에는 미리 대소 관계가 설정되어 있어서 편하다.

tuple

튜플은 사물의 유한한 순서를 뜻한다. 두 개 이상의 순서대로 정렬된 서로 다른 값들의 모임을 정리할 때 이용한다. c++11이상에서 지원한다.

std::tuple<int, char, string> tupleValue(10,x,"string");
튜플 키워드르르 이용하여 꺽쇠 안에 묶기 원하는 데이터 형을 나열합니다. 튜플은 함수에서 반환값이 두 개 이상일 경우에 사용하면 효과적이다. 두 개 이상의 반환값을 전달하기 위해 포인터나 참조를 이용하거나 구조체를 만들어 전달하는 불편함이 있었습니다. 튜플을 이용한다면 반환값을 몇개이던지 전달할 수 있습니다.

튜플 활용시 사용하는 함수들

  • make_tuple 튜플을 만드는 함수
  • get 튜플로부터 값을 가져오는 함수
  • swap 튜플을 다른 튜플과 값을 바꾸는 함수

auto typleValue = std::make_tuple(10, 'x', "string")
make_tuple()함수는 튜플을 만들어 주는 함수입니다. auto로 설정된 변수 tupleValue에 make_tuple을 이용하여 초기화하면 tupleValue는 데이터 타입이 튜플이 되는 것입니다. tuple 키워드로 선언한 것과 같은 값을 가지게 됩니다.

std::get<2>(tupleValue);
get() 함수를 이용해 tupleValue에 저장된 값 중 2번 인덱스를 가진 "tuple string"을 가져옵니다. 튜플은 배열과 마찬가지로 제일 처음의 값이 0번 인덱스입니다.

std:swap(tup1, tup2);
swap() 함수는 두개의 튜플의 값을 바꾸는 함수입니다. swap() 함수를 사용하기 위해서 두 개의 튜플이 서로 같은 형의 데이터를 같은 순서로 저장해야 합니다.

std::tie(x,y,z) = tupleValue;
= 연산자를 이용하여 tuple에 저장된 값을 각각 x, y, z에 풀어서 넣어주어야 합니다. 이때 tie 키워드를 사용합니다. 이렇게 값을 따로 분류한 x, y, z에는 make_tuple()로 생성한 값인 10, 'x', "string"이 각각 저장됩니다.

#include <iostream>
#include <string>
#include <tuple>
using namespace std;
 
tuple<int, string> getAgeandName()
{
    int age;
    string name;
    cout << "나이를 입력하세요: ";
    cin >> age;
 
    cout << "이름을 입력하세요: ";
    cin >> name;
 
    return make_tuple(age, name);
}
 
int main()
{
    tuple<int, string> personInfo;
    personInfo = getAgeandName();
 
    cout << "나이: " << get<0>(personInfo) << endl;
    cout << "이름: " << get<1>(personInfo) << endl;
 
    return 0;
}

source : 바킹독 실전알고리즘
https://jjeongil.tistory.com/148

profile
바른 자세로 코딩합니다 👦🏻💻

0개의 댓글