위 글은 큰돌의 터전 님의 강의자료를 참조해서 정리하고 제가 알고리즘을 풀면서 더 추가적으로 사용할 만한 내용들을 정리한 글입니다.
알고리즘 풀이 강의로 큰돌의 터전님의 강의 강력 추천드립니다.
강의링크
pair와 tuple
pair와 tuple은 타입이나 자료구조는 아닙니다. C++에서 제공하는 utility 라이브러리 헤더의 템플릿 클래스이며 자주 사용되기 때문에 알아보겠습니다.
pair는 first와 second 라는 멤버변수를 가지는 클래스입니다. 두가지 값을 담아야 할 때 씁니다. tuple은 세가지 이상의 값을 담을 때 씁니다. 여기서 tie는 pair이나 tuple로부터 값을 끄집어낼 때 사용되는 함수입니다.
#include<bits/stdc++.h>
using namespace std;
pair<int, int> pi;
tuple<int, int, int> tl;
int a, b, c;
int main(){
pi = {1, 2};
tl = make_tuple(1, 2, 3);
tie(a, b) = pi;
cout << a << " : " << b << "\n";
tie(a, b, c) = tl;
cout << a << " : " << b << " : "<< c << "\n";
return 0;
}
pair의 경우 {a, b} 또는 make_pair(a, b)로 만들 수 있습니다.
원래는 a = pi.first; b = pi.second 이런식으로 끄집어내야 하는데 tie를 쓰게 되면 tie(a, b) = pi 이렇게 끄집어 낼 수 있습니다.
다음 코드는 tie를 쓰지 않는 코드입니다.
pair은 first, second로 값을 끄집어 내며, tuple같은 경우 get<0> .. 이런식으로 값을 꺼내야 합니다.
#include<bits/stdc++.h>
using namespace std;
pair<int, int> pi;
tuple<int, int, int> ti;
int a, b, c;
int main(){
pi = {1, 2};
a = pi.first;
b = pi.second;
cout << a << " : " << b << "\n";
ti = make_tuple(1, 2, 3);
a = get<0>(ti);
b = get<1>(ti);
c = get<2>(ti);
cout << a << " : " << b << " : "<< c << "\n";
return 0;
}
/*
1 : 2
1 : 2 : 3
*/
auto키워드
auto 타입은 복잡하고 긴 타입의 변수명을 대신하는 간단한 방법입니다. 예를 들어 다음 코드처럼 pair<int, int> it가 아닌 auto it로 조금 더 짧게 선언되는 것을 볼 수 있습니다
#include<bits/stdc++.h>
using namespace std;
int main()
{
vector<pair<int, int>> v;
for(int i = 1; i <= 5; i++){
v.push_back({i, i});
}
for(auto it : v)
{
cout << it.first << " : " << it.second << '\n';
}
for(pair<int, int> it : v)
{
cout << it.first << " : " << it.second << '\n';
}
return 0;
}
/*
1 : 1
2 : 2
3 : 3
4 : 4
5 : 5
1 : 1
2 : 2
3 : 3
4 : 4
5 : 5
*/
pair의 화살표 연산자
#include<bits/stdc++.h>
using namespace std;
pair<int, int> a = {1, 2};
int main()
{
pair<int, int> * b = &a;
cout << b -> first << "\n";
cout << (*b).first << "\n";
return 0;
}
/*
1
1
*/