STL Pair 템플릿 사용자 정의 정렬 메서드

C++Beginner
지금 연습하기

소개

이 랩에서는 C++ 프로그래밍 언어를 사용하여 pair 템플릿에 대한 사용자 정의 정렬 메서드를 생성하고 vector 를 사용하여 구현하는 방법을 배우게 됩니다. 이 랩은 C++ 프로그래밍의 기본 사항과 pair 템플릿의 개념에 대한 사전 지식을 가지고 있다고 가정합니다. 이러한 주제에 익숙하지 않은 경우, 진행하기 전에 해당 튜토리얼을 먼저 살펴보는 것이 좋습니다.

빈 벡터 생성 및 요소 채우기

pair 의 빈 벡터를 선언한 다음 일부 요소로 채우는 것으로 시작합니다.
이 단계에서는 빈 벡터를 생성합니다.

#include <iostream>
#include <bits/stdc++.h>

using namespace std;

int main() {
  vector<pair<int, int>> v;

  return 0;
}

이 코드 블록에서는 필요한 헤더 파일을 포함하고 pair 의 빈 벡터를 선언했습니다.

벡터에 요소 채우기

빈 벡터를 생성한 후에는 여기에 요소를 추가할 수 있습니다. 벡터 클래스의 push_back 메서드를 사용하여 요소를 추가합니다. 이 경우 정수 pair 를 벡터에 추가합니다.

int main() {
  vector<pair<int, int>> v;
  v.push_back(make_pair(1, 5));
  v.push_back(make_pair(1, 3));
  v.push_back(make_pair(2, 6));
  v.push_back(make_pair(2, 4));
  v.push_back(make_pair(5, 24));

  return 0;
}

이 코드 블록에서는 5 개의 pair 를 벡터 v 에 추가합니다.

사용자 정의 정렬 메서드 생성

사용자 정의 정렬 메서드를 생성하려면 먼저 비교 함수를 정의해야 합니다. 비교 함수는 두 개의 pair 를 비교하고 첫 번째 pair 가 두 번째 pair 보다 작은지 여부를 나타내는 부울 값을 반환합니다. 이 경우 각 pair 의 첫 번째 요소를 비교하고, 같으면 pair 의 두 번째 요소를 비교합니다.

bool cmp(pair<int, int> x, pair<int, int> y)
{
    if (x.first != y.first)
        return x.first < y.first;
    else
        return x.second < y.second;
}

이 코드 블록에서는 두 개의 정수 pair 를 인수로 받아 지정된 조건에 따라 부울 값을 반환하는 비교 함수를 생성했습니다. 이 함수는 먼저 각 pair 의 첫 번째 요소를 비교합니다. 같지 않으면 함수는 비교 결과를 반환합니다. 같으면 함수는 pair 의 두 번째 요소를 비교하고 비교 결과를 반환합니다.

sort 함수를 사용하여 벡터 정렬

이 단계에서는 이전 단계에서 생성한 사용자 정의 정렬 메서드를 기반으로 벡터의 요소를 정렬합니다. 벡터를 정렬하려면 STL 의 sort 메서드를 호출하고 벡터를 인수로 전달하며, 사용자 정의 정렬 메서드를 세 번째 인수로 전달해야 합니다.

int main() {
  vector<pair<int, int>> v;
  v.push_back(make_pair(1, 5));
  v.push_back(make_pair(1, 3));
  v.push_back(make_pair(2, 6));
  v.push_back(make_pair(2, 4));
  v.push_back(make_pair(5, 24));


  sort(v.begin(), v.end(), cmp);

  return 0;
}

이 코드 블록에서는 STL 의 sort 메서드를 사용하여 벡터 v를 정렬했습니다. 사용자 정의 정렬 메서드 cmp를 세 번째 매개변수로 전달했습니다.

정렬된 벡터 출력

이 단계에서는 정렬된 벡터의 요소를 출력합니다. for 루프를 사용하여 벡터를 반복하고 각 pair 의 첫 번째 및 두 번째 요소를 출력합니다.

int main() {
  // previous code

  for (auto p : v)
  {
      cout << p.first << " " << p.second << endl;
  }
  return 0;
}

이 마지막 코드 블록에서는 for-each 루프를 사용하여 벡터의 pair 에 접근하고 콘솔에 출력했습니다. 이제 코드를 실행하여 결과를 확인해 보겠습니다.

코드 실행

코드를 실행하려면 다음 명령을 사용하여 컴파일해야 합니다.

g++ ~/project/main.cpp -o main && ./main

코드를 실행하면 정렬된 pair 가 오름차순으로 출력되는 것을 볼 수 있습니다.

전체 코드 예시

#include <iostream>
#include <bits/stdc++.h>

using namespace std;

bool cmp(pair<int, int> x, pair<int, int> y)
{
    if (x.first != y.first)
        return x.first < y.first;
    else
        return x.second < y.second;
}

int main() {
    vector<pair<int, int>> v;
    v.push_back(make_pair(1, 5));
    v.push_back(make_pair(1, 3));
    v.push_back(make_pair(2, 6));
    v.push_back(make_pair(2, 4));
    v.push_back(make_pair(5, 24));

    sort(v.begin(), v.end(), cmp);

    for (auto p : v)
    {
        cout << p.first << " " << p.second << endl;
    }
    return 0;
}

요약

이 랩에서는 pair 템플릿에 대한 사용자 정의 정렬 메서드를 생성하고 C++ 에서 벡터를 사용하여 구현하는 방법을 배웠습니다. 빈 벡터를 생성하고, 요소를 추가하고, 비교 함수를 생성했으며, sort 함수를 사용하여 사용자 정의 정렬 메서드를 사용하여 벡터의 요소를 정렬하고, 정렬된 벡터를 출력했습니다. 사용자 정의 정렬 메서드는 코드에서 정의하는 특정 요구 사항 또는 조건에 따라 벡터의 pair 를 정렬하는 데 사용할 수 있습니다.