[cpp]배열 값, 인덱스 정렬(sorted list of indices)

hjeun0111·2022년 9월 28일
0

python과 java에 이어서 cpp로도 개발하는 일도 있으니, 여기도 정리함

배열 정렬 후 결과를 값으로 출력하는 것도 자주 사용되지만..
배열의 인덱스로 결과를 출력 할 때 참고하고자 정리함

다른 언어로 테스트한 예제 포스팅 링크
(python) sorted list of indices 예제
(java) sorted list of indices 예제

1. 오름 차순 (배열 값 정렬, 배열 값의 인덱스 정렬 출력 예제)

#include <iostream>
#include <vector>
#include <algorithm>

int main() {

    std::vector<int> ary = {102, 67, 35, 77, 153};
    std::sort( std::begin(ary), std::end(ary));
    for (auto v : ary)
        std::cout << v << ' ';
    std::cout << std::endl;
        
    ary = {102, 67, 35, 77, 153};
    std::vector<int> indexes(ary.size());
    std::size_t n(0);
    std::generate(std::begin(indexes), std::end(indexes), [&]{ return n++; });

    std::sort( std::begin(indexes), 
               std::end(indexes),
               [&](int obj1, int obj2) { return ary[obj1] < ary[obj2]; } );

    for (auto v : indexes)
        std::cout << v << ' ';
    std::cout << std::endl;
    return 0;
}

----- 출력 -----
35 67 77 102 153 
2 1 3 0 4 

2. 내림 차순 (배열 값 정렬, 배열 값의 인덱스 정렬 출력 예제)

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> ary = {102, 67, 35, 77, 153};
    std::sort( std::begin(ary), std::end(ary), std::greater<int>());
    for (auto v : ary)
        std::cout << v << ' ';
    std::cout << std::endl;

    ary = {102, 67, 35, 77, 153};
    std::vector<int> indexes(ary.size());
    std::size_t n(0);
    std::generate(std::begin(indexes), std::end(indexes), [&]{ return n++; });

    std::sort( std::begin(indexes), 
               std::end(indexes),
               [&](int obj1, int obj2) { return ary[obj1] > ary[obj2]; } );

    for (auto v : indexes)
        std::cout << v << ' ';

    return 0;  
}

----- 출력 -----
153 102 77 67 35 
4 0 3 1 2

cpp 정리도 끝

그럼, 이만!

다른 언어로 테스트한 예제 포스팅 링크
(python) sorted list of indices 예제
(java) sorted list of indices 예제

profile
I'm a software engineer

0개의 댓글