Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 세트(Set)를 역방향으로 순회하는 방법

C++의 std::set은 자동으로 오름차순 정렬되는 연관 컨테이너입니다. 그렇다면 이 세트를 역방향(내림차순)으로 순회하려면 어떻게 해야 할까요?

예를 들어 세트가 S = [10, 15, 26, 30, 35, 40, 48, 87, 98]과 같다면, 역방향 순회 시 출력 결과는 다음과 같아야 합니다.

98 87 48 40 35 30 26 15 10

역방향 순회의 핵심: reverse_iterator

세트를 역순으로 탐색하려면 역방향 반복자(reverse_iterator)를 사용하면 됩니다. 이때 rbegin()rend() 함수를 활용하는데, 각 함수의 역할은 다음과 같습니다.

  • rbegin(): 역방향 순회의 시작점, 즉 컨테이너의 마지막 요소를 가리킵니다.
  • rend(): 역방향 순회의 끝점, 즉 첫 번째 요소 앞의 위치를 가리킵니다.

예제 코드

아래 예제에서는 같은 세트를 정방향과 역방향으로 각각 순회하여 결과를 비교해 봅니다.

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

int main() {
    int arr[] = {10, 15, 26, 30, 35, 40, 48, 87, 98};
    set<int> my_set(arr, arr + sizeof(arr) / sizeof(arr[0]));

    set<int>::iterator it;
    cout << "정방향 순회 결과: ";
    for (it = my_set.begin(); it != my_set.end(); it++)
        cout << *it << " ";

    set<int>::reverse_iterator rev_it;
    cout << "\n역방향 순회 결과: ";
    for (rev_it = my_set.rbegin(); rev_it != my_set.rend(); rev_it++)
        cout << *rev_it << " ";

    return 0;
}

실행 결과

정방향 순회 결과: 10 15 26 30 35 40 48 87 98
역방향 순회 결과: 98 87 48 40 35 30 26 15 10

추가 팁

C++11 이상을 사용한다면 범위 기반 for문과 함께 auto 키워드를 활용해 코드를 더 간결하게 작성할 수도 있습니다.

for (auto rev_it = my_set.rbegin(); rev_it != my_set.rend(); ++rev_it)
    cout << *rev_it << " ";

이처럼 rbegin()rend()만 기억하면 별도의 정렬 작업 없이도 세트의 요소를 손쉽게 내림차순으로 출력할 수 있습니다.