如果有一个结构体:
#include <algorithm>
#include <vector>
#include <iomanip>
#include <string>
using namespace std;
bool pred(string *a, string *b){
return *a < *b;
}
struct Student {
int ID;
int age;
double gpa;
string firstname;
string lastname;
};
int main () {
vector<Student*>v;
vector<Student*>v_sortedFirstName;
//both filled with same information
// sort v_sortedFirstName by first name
sort(v_sortedFirstName.begin(), v_sortedFirstName.end(), pred);
}
现在假设 vector v
填充了信息,v_sortedFirstName
填充了相同的信息(指向与 v
相同的位置) >).我将如何(使用 STL 排序函数,按 firstname 对 v_sortedFirstName
进行排序?
我在想这一行:sort(v_sortedFirstName.begin(), v_sortedFirstName.end(), pred);
应该类似于 sort(v_sortedFirstName->firstname.begin(), v_sortedFirstName->firstname.end(), pred);
但那不起作用。
此外,如果你们不介意的话,我想坚持使用上面的谓词函数而不使用 Lambda,因为我还没有学会。
最佳答案
您的谓词必须接受 Student *
而不是 string *
:
bool pred(Student *a, Student *b){
return a->firtname < b->firtsname;
}
请注意,如果您不打算将数据更改参数类型修改为 const Student *
,这将使您的代码更干净、更安全(如果您将代码放在 pred
中,错误地尝试修改该结构然后编译器将拒绝编译并且很容易检测和修复该错误):
bool pred(const Student *a, const Student *b){
return a->firtname < b->firtsname;
}
关于c++ - 按一个字段对自定义对象的 vector 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36921636/