Computer >> Máy Tính >  >> Lập trình >> C ++

Sắp xếp một vectơ của các đối tượng tùy chỉnh bằng C ++ STL


Bạn có thể sắp xếp một vectơ của các đối tượng tùy chỉnh bằng cách sử dụng hàm C ++ STL std ::sort. Hàm sắp xếp có một dạng nạp chồng nhận làm đối số đầu tiên, cuối cùng, bộ so sánh. Đầu tiên và cuối cùng là các trình vòng lặp tới các phần tử đầu tiên và cuối cùng của vùng chứa. Bộ so sánh là một hàm vị từ có thể được sử dụng để cho biết cách sắp xếp vùng chứa.

ví dụ

#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;
   }
}

Đầu ra

Điều này sẽ đưa ra kết quả -

this is a test

Nếu bạn đang làm việc trên các phiên bản C ++ cũ hơn, bạn cũng có thể chuyển một tham chiếu hàm -

//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);

Bạn cũng có thể nạp chồng toán tử