我有一个数据结构,例如:
struct Data
{
string firstname;
string lastname:
string age;
}
我已将每个结构放在一个 vector (VectorOfData) 中。是否可以遍历此 vector 并按年龄降序对 vector 中的每个结构进行排序?使用类似的东西:
for(std::vector<Data>::const_iterator it = VectorOfData.begin(); it != VectorOfData.end(); ++it)
{
//sorting by age here?
}
我假设它不会那么简单,因为 it 迭代器一次只访问 vector 中的一个结构?
我意识到我什至可以在将结构放入 vector 之前进行排序,但我的问题并没有那么简单。这只是我能解释的最简单的方法。任何建议将不胜感激,谢谢
您可以将 std::sort 与自定义比较函数一起使用:
bool is_younger(const Data& x, const Data& y) { return x.age < y.age; }
排序:
std::sort(VectorOfData.begin(), VectorOfData.end(), is_younger);
或者,您可以定义一个自定义的仿函数(注意:这实际上是首选,因为它增加了内联的可能性,阅读:更快的排序)
struct is_younger_functor
{
bool operator()(const Data& x, const Data& y) const
{
return x.age < y.age;
}
};
排序:
std::sort(VectorOfData.begin(), VectorOfData.end(), is_younger_functor());
如果你想为Data
定义一个严格的排序关系,你应该考虑把它变成一个常规类型(定义操作符<, <=, ==, !=, >, >=) .
在那种情况下,您将不需要定义这个 is_younger 仿函数并且可以只用迭代器调用 std::sort。
编辑:严格来说,您只需要为 std::sort 定义运算符 <,但如果您定义了它,最好定义其余部分。