如果有结构:
#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);
}
现在假设向量v
填充了信息,v_sortedFirstName
填充了相同的信息(指向与v
相同的点)。我如何(使用STL排序功能,按名字排序v_sortedFirstName
?
我在想这一行:sort(v_sortedFirstName.begin(), v_sortedFirstName.end(), pred);
应该是sort(v_sortedFirstName->firstname.begin(), v_sortedFirstName->firstname.end(), pred);
的行,但这不起作用。
另外,如果你们不介意,我想坚持上面的谓词函数,而不是使用Lambda,因为我还没有学到它。
答案 0 :(得分:3)
您的谓词必须接受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;
}