C++ 为什么这个代码不起作用?
下面是一个简单的字符串排序代码。它会在模板库中的某个位置导致断言错误:C++ 为什么这个代码不起作用?,c++,C++,下面是一个简单的字符串排序代码。它会在模板库中的某个位置导致断言错误: 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
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 << " ";
}
}
struct{
布尔运算符()(字符串a、字符串b)
{
排序(a.begin(),a.end());
排序(b.开始(),b.结束());
返回a.compare(b);
}
}mycompare;
void mySort(向量和strvec)
{
排序(strvec.begin(),strvec.end(),mycompare);//第1行
}
无效测试_mySort()
{
向量向量{“abc”、“bac”、“ma”、“acre”、“reca”、“care”};
mySort(vec);
coutstd::string::compare
不返回布尔值。它以三种可能的状态返回int值,即负(ab)。当您在比较器的return语句中将其转换为bool时,如果它们不相等,则为true,如果它们相等,则为false。这不满足std::sort
对其比较器所期望的条件。只需使用以下方法:
return a < b;
Johnny,Johnny,Johnny…什么是LINE1
?struct{
?“它在模板库的某个地方导致断言错误”不是正确的问题描述。请发布准确完整的错误消息。
return a.compare(b) < 0;