我写了一个比较运算符如下:
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;”在视觉工作室。
答案 0 :(得分:1)
当std::string::compare
“大于”1
时,a
的返回值不一定是b
。它必须大于0
。
而不是
return a.compare(b) == 1 ? true : false;
我认为你需要:
return (a.compare(b) < 0);