c++ - 按结构中的变量对结构 vector 进行排序?

标签 c++

<分区>

我有一个数据结构,例如:

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 定义运算符 <,但如果您定义了它,最好定义其余部分。

关于c++ - 按结构中的变量对结构 vector 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18759920/

相关文章:

c++ - 未找到在未命名命名空间内声明的函数的函数定义 - 如何解决? ( Visual Studio 2015)

c++ - 三路比较替换除 == 之外的所有其他比较运算符

c++ - 当文件为 Windows (\r\n) 格式化时,为什么 fstream::tellg() 返回值被输入文本文件中的换行符数放大?

c++ - 类定义中的段错误无法找出位置

c++ - 传递返回多态 unique_ptr 的 lambda 作为函数指针

c++ - 如何将图标添加到您的 C++ 控制台应用程序?

c++ - 从深度纹理采样总是结果为 0

c++ - 多态性和方法重载在 C++ 中几乎是一回事吗

c++ - 如何在等待时保持消息推送?

c++ - 带有默认参数的虚函数,奇怪的输出