2010-06-21 4 views

답변

6

아마도 std::sort이 필요합니다.

#include <algorithm> 
#include <vector> 

int 
main() 
{ 
    std::vector<int> foo; 

    std::sort(foo.begin(), foo.end()); 

    return 0; 
} 

두 개의 부스트 라이브러리를 사용하는 유사한 예가 아래에있다.

#include <boost/assign/list_of.hpp> 

#include <boost/foreach.hpp> 

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

int 
main() 
{ 
    std::vector<int> foo = boost::assign::list_of(1)(4)(5)(10)(3)(2); 

    std::cout << "unsorted" << std::endl; 
    BOOST_FOREACH(const int i, foo) { 
     std::cout << i << std::endl; 
    } 

    std::sort(foo.begin(), foo.end()); 

    std::cout << "sorted" << std::endl; 
    BOOST_FOREACH(const int i, foo) { 
     std::cout << i << std::endl; 
    } 

    return 0; 
} 
+15

기본에 충실하면 코드 예제가 더 좋을 것이라고 생각합니다. 독자가'std :: sort' 예제를 이해하기 위해 두 개의 다른 Boost 라이브러리에 익숙해 지도록 요청하는 것은 약간의 질문 일 것입니다. – jalf

+0

단순한 경우, 부스트를 사용한 정렬과 같은 것은 정당화되지 않을 가능성이 큽니다. – wlk

+1

저는 여러분이 반응하는 것 같아요. 여기에 사용 된 두 개의 Boost 구조체는 Boost에 대한 완전한 초보자라도 이해하기 쉽습니다. 그것들의 사용은 필요하지 않았습니다. 실제로'std :: sort (beginIndex, endIndex)'라인 만 있으면 충분했을 것입니다. 그러나 "독자는 두 개의 Boost 라이브러리에 익숙해야합니다". –

23

vector 클래스에는 sort 기능이 없습니다.

그러나 모든 반복기 범위에서 작동하는 sort이 있습니다. 그리고 vector은 반복자를 노출하지 않습니다.

는 벡터 vec 정렬하려면 :

#include <algorithm> 

std::sort(vec.begin(), vec.end()); 
+1

이것은입니다 당신이하고 싶어하는 것, 부스트는 절대적으로 필요하지 않습니다. – rubenvb

+3

일부 컨테이너 - 임의 액세스 권한이있는 컨테이너 만 해당됩니다. 'list'는 멤버 함수'sort'를 가지고 있고, 정렬 된 연관 컨테이너는 이미 정렬되어 있고, 정렬되지 않은 연관 컨테이너는 정렬 될 수 없습니다. –

+0

완벽을 기하기 위해 정렬해야하는 _how_를 지정할 수 있음을 언급 할 수 있습니다. –

1

기타의 자신의 답변에서 언급했듯이을, 표준이 :: 분류 기능.

그러나 "기본 정렬 옵션?" T를 정의한 클래스 인 벡터를 정렬하려는 것입니까? 이 경우 클래스에 "operator <"을 구현해야합니다. 예를 들어

,

class Foo 
{ 
    public : 
     Foo(); 
     ~Foo(); 
    private : 
     int c; 
}; 

std::vector<Foo> foovec; 
std::sort(foovec.begin(), foovec.end()); 

은 위의 "표준 : : 일종의"라인이 푸에, 당신이 정의하는 "연산자 <"를 필요로 작동하는지 확인하십시오.

class Foo 
{ 
    public : 
     Foo(); 
     ~Foo(); 
     bool operator<(const Foo& rFoo) const; 
    private : 
     int c; 
}; 

bool Foo::operator<(const Foo& rFoo) const 
{ 
    return(c < rFoo.c); 
}