STL::vector의 오름/내림차순 정렬

purewell의 이미지

class MyData
{
  private:
    int data;

  public:
    bool operator > (const MyData& cmp) const {
      return (this->data > cmp.data); }
    // <, >=, <=, ==, != 등등도 위와 같은 형태로 정의
};


...

int
main (int argc, char* argv[])
{

  vector<MyData> vData;

  // push_backs!!

  sort( vData.begin(), vData.end() );

  return 0;
}

일반적으로 정렬을 저렇게 하는데,
operator 정의를 바꾸지 않고 오름차순(혹은 내림차순)을
내림차순(혹은 오름차순)으로 바꿀 수 없을까요?

흠... reverse iterator를 살포시 이용해도 좋을 것 같긴 하지만...

wafe의 이미지

// sort descending, specifying the ordering function explicitly
sort(aVec.begin(), aVec.end(), greater<int>() );

이런식으로 정렬에 사용되는 연산을 제공할 수 있습니다.

greater, less 등등이 C++ 표준 라이브러리에 이미 정의돼 있을겁니다.

Heejoon Lee

bugiii의 이미지

기본형이 요소가 아닌 경우에는 (내부 멤버의 비교) 어쩔 수 없이 비교 함수자를 만들어서 사용해야 하지 않을까요? 만들지 않고 기본 올림/내림차순의 방향을 바꾼다는 것은 좀 어렵지 않을까요?