按一个字段对自定义对象的矢量进行排序

时间:2016-04-28 17:29:59

标签: c++ sorting stl

如果有结构:

#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,因为我还没有学到它。

1 个答案:

答案 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;
}