Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++ STL을 사용하여 사용자 정의 개체 벡터 정렬


C++ STL 함수 std::sort를 사용하여 사용자 정의 개체의 벡터를 정렬할 수 있습니다. 정렬 함수에는 첫 번째, 마지막, 비교자를 인수로 사용하는 오버로드된 형식이 있습니다. 첫 번째와 마지막은 컨테이너의 첫 번째 및 마지막 요소에 대한 반복기입니다. 비교기는 컨테이너를 정렬하는 방법을 알려주는 데 사용할 수 있는 술어 함수입니다.

예시

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

using namespace std;
struct MyStruct {
   int key;
   string data;
   MyStruct(int key, string data) {
      this -> key = key;
      this -> data = data;
   }
};
int main() {
   std::vector<MyStruct> vec;
   vec.push_back(MyStruct(4, "test"));
   vec.push_back(MyStruct(2, "is"));
   vec.push_back(MyStruct(3, "a"));
   vec.push_back(MyStruct(1, "this"));
   
   // Using lambda expressions in C++11
   sort(vec.begin(), vec.end(), [](const MyStruct& lhs, const MyStruct& rhs) {
      return lhs.key < rhs.key;
   });
   for(auto it = vec.begin(); it != vec.end(); it++) {
      cout << it -> data << endl;
   }
}

출력

이것은 출력을 제공합니다 -

this is a test

이전 C++ 버전에서 작업하는 경우 함수 참조도 전달할 수 있습니다. −

//define the function:
bool comparator(const MyStruct& lhs, const MyStruct& rhs) {
   return lhs.key < rhs.key;
}
// pass it to sort:
sort(vec.begin(), vec.end(), &comparator);

클래스/구조체에서 <연산자를 오버로드하고 sort(first, last) 형식을 직접 사용할 수도 있습니다. 따라서 정렬할 때 항목을 비교하기 위해 이 함수를 사용합니다.