2014-05-24 2 views
-2

세 번째 열의 값을 정렬하고 같은 시간에 정렬하려면 열 1과 2의 값이 배열을 사용하는 세 번째 열 과 같은 위치를 따릅니다. 예를하나의 배열에 여러 필드 정렬 -C++

에 대한

나는 그것이 벡터와 표준을 사용하여 수행 할 수 있습니다 알고

1 40 1000 
2 30 2000 
5 20 3000 
3 10 4000 
4 50 5000 

을 정렬 한 후

2 30 2000 
1 40 1000 
3 10 4000 
5 20 3000 
4 50 5000 

정렬하기 전에 :: 종류 그러나 그것은 가능하다 배열을 사용하여 동일한 결과를 얻으시겠습니까?

+2

가 어떻게 행과 열을 표시합니까? – juanchopanza

답변

5

당신은 당신이 처음에 반복자를 얻어 sort에 전달할 종료 std::beginstd::end을 사용할 수, 배열을 정렬 할 std::sort을 사용할 수 있으며, 비교 기능을 제공하기 위해 std::tuple를 사용할 수 있습니다.

std::vector과이 작업의 원시 배열 사이에 특히 관련있는 차이는 없습니다.

예제 코드 :

#include <algorithm>  // std::sort 
#include <iterator>   // std::begin, std::end 
#include <iostream>   // std::cout, std::endl 
#include <tuple>   // std::tie 
using namespace std; 

struct Triplet { int values[3]; }; 

template< int n > 
void display(Triplet const (&array)[n]) 
{ 
    for(auto const& t : array) 
    { 
     cout << t.values[0] << ' ' << t.values[1] << ' ' << t.values[2] << endl; 
    } 
} 

auto main() 
    -> int 
{ 
    Triplet array[] = 
    { 
     { 2, 30, 2000 }, 
     { 1, 40, 1000 }, 
     { 3, 10, 4000 }, 
     { 5, 20, 3000 }, 
     { 4, 50, 5000 } 
    }; 

    auto const triplet_less = [](Triplet const& a, Triplet const& b) -> bool 
    { 
     return 
      (tie(a.values[2], a.values[0], a.values[1]) < 
       tie(b.values[2], b.values[0], b.values[1])); 
    }; 

    cout << "Original data: " << endl; 
    display(array); 

    sort(begin(array), end(array), triplet_less); 

    cout << endl; 
    cout << "Sorted data: " << endl; 
    display(array); 
} 
관련 문제