下面是一个用于排序字符串的简单代码。它会在模板库中的某处导致断言错误:
struct {
bool operator()(string a, string b)
{
sort(a.begin(), a.end());
sort(b.begin(), b.end());
return a.compare(b);
}
} mycompare;
void mySort(vector<string> &strvec)
{
sort(strvec.begin(), strvec.end(), mycompare); //LINE1
}
void test_mySort()
{
vector<string> vec{ "abc", "bac", "ma", "acre", "reca", "care" };
mySort(vec);
cout << "After sort: " << endl;
for (vector<string>::iterator ite = vec.begin(); ite != vec.end(); ite++)
{
cout << *ite << " ";
}
}
LINE1无法执行。
答案 0 :(得分:3)
std::string::compare
不会返回布尔值。它以三种可能的状态返回一个int,即负(a b)。当你在比较器的return语句中将它转换为bool时,如果它们不相等则结果为true,如果它们相等则结果为false。这不满足std::sort
对比较器的预期条件。只需使用:
return a < b;
如果您想使用string::compare
,那么您可以像这样使用它:
return a.compare(b) < 0;