sorting结构向量

我有一个vector<data> info其中data定义为:

 struct data{ string word; int number; }; 

我需要根据string的长度对info进行sorting。 有没有一个快速简单的方法来做到这一点?

使用比较function:

 bool compareByLength(const data &a, const data &b) { return a.word.size() < b.word.size(); } 

然后在标头#include <algorithm>使用std::sort

 std::sort(info.begin(), info.end(), compareByLength); 

只是做一个比较函数/仿函数:

 bool my_cmp(const data& a, const data& b) { // smallest comes first return a.word.size() < b.word.size(); } std::sort(info.begin(), info.end(), my_cmp); 

或者在您的data类中提供一个bool operator<(const data& a) const

 struct data { string word; int number; bool operator<(const data& a) const { return word.size() < a.word.size(); } }; 

或者Fred的非会员说:

 struct data { string word; int number; }; bool operator<(const data& a, const data& b) { return a.word.size() < b.word.size(); } 

只需调用std::sort()

 std::sort(info.begin(), info.end()); 

是的:您可以使用自定义比较function进行sorting:

 std::sort(info.begin(), info.end(), my_custom_comparison); 

my_custom_comparison需要是一个带有operator()重载(一个函数)的函数或类,它接受两个data对象,并返回一个bool指示第一个是否在第二个之前sorting(即first < second )。 或者,您可以重载operator<您的类typesdata ; operator<std::sort使用的默认std::sort

无论哪种方式,比较函数都必须产生严格的元素sorting 。

正如其他人所提到的,你可以使用一个比较函数,但是你也可以重载<operator和less<T>函子。

 struct data { string word; int number; bool operator < (const data& rhs) const { return word.size() < rhs.word.size(); } }; 

那只是:

 std::sort(info.begin(), info.end()); 

编辑

正如James McNellis所指出的那样, sort在默认情况下实际上并不使用less<T>函子。 然而, less<T>函子的其他部分仍然是正确的,这意味着如果你想把struct data放到一个std::map或者std::set它仍然可以工作,但是提供比较function的其他答案将需要额外的代码来处理。