为什么这段代码不起作用?

时间:2014-08-17 04:34:12

标签: 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)
{
    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无法执行。

1 个答案:

答案 0 :(得分:3)

std::string::compare不会返回布尔值。它以三种可能的状态返回一个int,即负(a b)。当你在比较器的return语句中将它转换为bool时,如果它们不相等则结果为true,如果它们相等则结果为false。这不满足std::sort对比较器的预期条件。只需使用:

return a < b;

如果您想使用string::compare,那么您可以像这样使用它:

return a.compare(b) < 0;