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

您可以使用C ++ STL函数std::sort对自定义对象的向量进行排序。sort函数具有一个重载形式,该形式将第一个,最后一个比较器作为参数。first和last是容器的first和last元素的迭代器。比较器是一个谓词函数,可用于指示如何对容器进行排序。 

示例

#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"));

   

   //在C ++ 11中使用Lambda表达式

   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;

}

//将其传递给排序:

sort(vec.begin(), vec.end(), &comparator);

您也可以在类/结构中重载<运算符,并直接使用sort(first,last)形式。因此,排序时将使用此功能比较项目。


以上是 使用C ++ STL对自定义对象的向量进行排序 的全部内容, 来源链接: utcz.com/z/352510.html

回到顶部