我的定制比较不起作用?

时间:2015-04-09 21:51:21

标签: c++

我写了一个比较运算符如下:

struct GreaterThan
{
    bool operator() (string a, string b)
    {

        if (a.length() == 1 && a[0] == b[0]) //LINE1
        {
            return true;
        }

        if (b.length() == 1 && b[0] == a[0]) //LINE2
        {
            return true;
        }

        return a.compare(b) == 1 ? true : false;
   }
};

vector<string> v{"2", "20", "5", "7"};
sort(v.begin(), v.end(), GreaterThan());

LINE1和LINE2的目的是在排序时使“2”超过“20”。 但它会导致运行时错误。错误是“无效的运算符&lt;”在视觉工作室。

1 个答案:

答案 0 :(得分:1)

std::string::compare“大于”1时,a的返回值不一定是b。它必须大于0

而不是

return a.compare(b) == 1 ? true : false;

我认为你需要:

return (a.compare(b) < 0);