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的其他答案将需要额外的代码来处理。