sort C ++ - "无效的运算符"

时间:2015-04-13 13:42:41

标签: c++ sorting

#include <algorithm>
#include <bitset>
#include <climits>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <ctime>
#include <deque>
#include <functional>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <vector>

using namespace std;

bool fun(int i, int j){
    return abs(i - j) != -1;
}

int main(){
    vector <int> v = { 1, 2, 3, 4, 5 };
    sort(v.begin(), v.end(), fun);
    for (int i = 0; i < v.size(); i++)
        cout << v[i] << " ";
    cout << endl;
    return 0;
}

当我使用比较器&#39; fun&#39;程序抛出异常&#39;无效的运算符&lt;&#39;。如何修改此功能以使程序正常运行?

2 个答案:

答案 0 :(得分:4)

您的fun函数未提供严格弱排序。如果ij相等,则返回true。所以你不遵守规则。您对标准库的实现通过抛出异常来响应。

答案 1 :(得分:2)

  

如何修改此功能以使程序正常运行?

假设您要按升序排序。只需使用operator <

bool fun(int i, int j)
{
    return i < j;
}

或者您可以使用标准提供的比较器。

sort(v.begin(), v.end(), std::less<int>());

请参阅评论中的链接或@DanielDaranas提供的答案,以了解您的原始功能无法正常工作的原因。