排序比较函数奇怪的行为

1 c++ sorting

以下功能是我的比较功能.虽然直接比较两个字符成功地匹配数组,但使用std :: string比较函数却没有.

int compare (student a, student b) {
  return a.name.compare(b.name);
  return a.name[0] < b.name[0];
}
Run Code Online (Sandbox Code Playgroud)

电话

sort(data.begin(), data.end(), compare);
Run Code Online (Sandbox Code Playgroud)

数据定义为 vector <student> data;

你有什么想法为什么std :: compare不排序它?

PS:std ::比较结果反转位置,例如alan,richard,byron,sarah - > sarah,byron,richard,alan.

Man*_*rse 6

std :: string :: compare返回int您要比较的内容0以给出实际的排序顺序.例如,要检查是否a.name小于b.name(根据给定的顺序compare),您将写:

return a.name.compare(b.name) < 0;
Run Code Online (Sandbox Code Playgroud)

您当前编写的方式将返回true任何不等的字符串,这不是std :: sort所需的有效严格弱顺序.

没有充分的理由在compare这里使用,因为std :: string有一个运算符<,它给出了两个字符串的等价顺序:

return a.name < b.name;
Run Code Online (Sandbox Code Playgroud)