使用 C++ STL 對自定義物件向量進行排序


你可以使用 C++ STL 函式 std::sort 對自定義物件向量進行排序。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) 表單。因此,在排序時,它將採用此函式來比較各項。


更新於 12-2 月-2020

12K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始
廣告