1. 정리
tuple은 편리하면서도 상당한 Output을 내주는 라이브러리입니다. 기존에 pair라는 라이브러리가 있었지만 개수가 2개로 제한되어 있었습니다. 하지만, tuple은 3개 이상의 쌍으로 저장이 가능하고 정렬 또한 엑셀처럼 간단하게 구현할 수 있습니다.
먼저, string과 int 쌍의 tuple로 이루어진 vector에 요소들을 추가해보겠습니다. 선언은 pair로 이루어진 vector와 유사하네요. 추가 또한, 함수명은 달라졌지만 직관적이고 어렵지 않습니다. 아래의 문구를 실행하면, { "TEST_1", 1 } 쌍과 { "TEST_1", 2 } 의 쌍이 추가된 것입니다.
vector<string> answer;
vector<tuple <string, int>> v;
//추가
v.emplace_back("TEST_1", 1);
v.emplace_back("TEST_2", 2);
다음은 전체 출력을 해보겠습니다. 일반 for문으로 배열처럼 접근이 가능하고 auto로도 가능합니다. tuple 안의 요소에 접근하는 방법은 get<index>vector 로 가능하네요. c에서 보기 힘든 형태이지만, 가독성을 낮추진 않는 것 같습니다. 이 코드에서는 get<0>은 string get<1>은 int 요소를 의미합니다.
출력은
TEST_1 : 1
TEST_2 : 2
TEST_1 : 1
TEST_2 : 2
로 출력됩니다.
//전체 출력 #1
for (int i = 0; i < v.size(); i++) {
cout << get<0>(v[i]) << " : " << get<1>(v[i]) << endl;
}
//전체 출력 #2
for (auto i: v) {
cout << get<0>(i) << " : " << get<1>(i) << endl;
}
다음은 int 값으로 내림차순하기 위한 함수를 선언해보죠. 인자는 string, int 쌍의 tuple로 받고 int형을 기준으로 내림차순하는 비교함수입니다. 람다형식으로도 정렬이 가능하지만, 보기 좋게 함수로 진행하겠습니다.
bool compare(tuple <string, int> a, tuple <string, int> b) {
return get<1>(a) > get<1>(b); //내림차순
}
이제 실제 정렬을 시켜보겠습니다. 벡터의 처음부터 끝까지 compare 함수 기준으로 정려합니다.
//tuple int 값 내림차순
sort(v.begin(), v.end(), compare);
다시 한 번, 전체 벡터를 순차적으로 출력해보겠습니다.
출력은
TEST_2 : 2
TEST_1 : 1
처럼 출력됩니다.
짧은 코드로 정말 많은 작업을 해주고 있습니다.
for (auto i : v) {
cout << get<0>(i) << " : " << get<1>(i) << endl;
}
tuple을 잘 활용하면, 마치 Excel에서 데이터를 정리하는 것과 같은 느낌이 듭니다. 코드를 구현함에 있어서, 좀 더 직관적인 느낌으로 코딩이 가능하군요. 빅데이터급의 데이터 정리가 아니라면, 처리 속도에서도 크게 나쁘지 않을 듯 합니다.
2. 전체코드
#include <string>
#include <vector>
#include <map>
#include <algorithm>
#include <iostream>
using namespace std;
bool compare(tuple <string, int> a, tuple <string, int> b) {
return get<1>(a) > get<1>(b); //내림차순
}
void solution(void) {
vector<string> answer;
vector<tuple <string, int>> v;
//추가
v.emplace_back("TEST_1", 1);
v.emplace_back("TEST_2", 2);
//전체 출력 #1
for (int i = 0; i < v.size(); i++) {
cout << get<0>(v[i]) << get<1>(v[i]) << endl;
}
//전체 출력 #2
for (auto i: v) {
cout << get<0>(i) << get<1>(i) << endl;
}
//tuple int 값 내림차순
sort(v.begin(), v.end(), compare);
//전체출력
for (auto i : v) {
cout << get<0>(i) << get<1>(i) << endl;
}
return;
}
int main(void)
{
solution();
return 0;
}
'소프트웨어 > C++' 카테고리의 다른 글
C++ lower_bound, upper_bound 활용하기 (0) | 2022.02.13 |
---|---|
C++ 주요 STL(Standard Template Library) 내용 정리 (0) | 2022.02.13 |
C++ 1, 2차원 vector 선언 및 함수로 인자 전달 후 출력 (0) | 2022.02.13 |
C++ map 라이브러리 코드 예제 (0) | 2022.02.13 |
C++ 함수 오버로딩(Function overloading) 코드 예제 (0) | 2022.02.13 |