c – 通过结构中的变量对结构的向量进行排序?
发布时间:2020-12-16 10:53:29 所属栏目:百科 来源:网络整理
导读:参见英文答案 Sorting a vector of custom objects????????????????????????????????????13个 我有一个数据结构,例如: struct Data{string firstname;string lastname:string age;} 我已将每个结构放在一个向量(VectorOfData)中.是否可以循环遍历此向量并按
参见英文答案 >
Sorting a vector of custom objects????????????????????????????????????13个
我有一个数据结构,例如: struct Data { string firstname; string lastname: string age; } 我已将每个结构放在一个向量(VectorOfData)中.是否可以循环遍历此向量并按向下年龄对向量中的每个结构进行排序?使用类似的东西: for(std::vector<Data>::const_iterator it = VectorOfData.begin(); it != VectorOfData.end(); ++it) { //sorting by age here? } 我假设它不会那么简单,因为it迭代器一次只访问向量中的一个结构? 我意识到我甚至可以在将结构放入向量之前进行排序,但我的问题并不那么简单.这是我能解释它的最简单方法.任何建议将不胜感激,谢谢 解决方法
您可以将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(),is_younger_functor()); 如果要为Data定义严格的排序关系,则应考虑将其转换为常规类型(定义运算符<,< =,==,!=,>,> =). 在这种情况下,您不需要定义此is_younger仿函数,只需使用迭代器调用std :: sort. 编辑:严格来说,你只需要定义运算符<对于std :: sort,但如果你定义它,最好定义其余部分. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |