使用 C++ STL 对自定义对象的向量排序


你可以使用 C++ STL 函数 std::sort 来对自定义对象的向量进行排序。sort 函数有一个重载形式,它以 first、last、comparator 为参数。first 和 last 是容器第一个和最后一个元素的迭代器。comparator 是一个谓词函数,可以用来告诉如何对容器进行排序。 

示例

#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-Feb-2020

12K+ 次浏览

开启您的事业

通过完成课程获得认证

开始学习
广告