排序 C++ - "invalid operator"

sort C++ - "invalid operator"

本文关键字:invalid operator C++ 排序      更新时间:2023-10-16
#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;
}

当我使用比较器"fun"时,程序会抛出异常"无效的运算符<"。如何修改此函数以使程序正常运行?

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

如何修改此函数以使程序正常运行?

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

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

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

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

请参阅评论中的链接或@DanielDaranas提供的答案,以了解原始函数不起作用的原因。