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);

cout
std::string::compare
不返回布尔值。它以三种可能的状态返回int值,即负(ab)。当您在比较器的return语句中将其转换为bool时,如果它们不相等,则为true,如果它们相等,则为false。这不满足
std::sort
对其比较器所期望的条件。只需使用以下方法:

return a < b;

Johnny,Johnny,Johnny…什么是
LINE1
struct{
?“它在模板库的某个地方导致断言错误”不是正确的问题描述。请发布准确完整的错误消息。
return a.compare(b) < 0;