【问题标题】:sort C++ - "invalid operator" [duplicate]排序C ++ - “无效运算符” [重复]
【发布时间】:2015-04-13 13:42:40
【问题描述】:
#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' 时,程序会抛出异常'invalid operator

【问题讨论】:

  • 我可以问一下,为什么您在最多需要 4 个文件时包含所有这些文件?
  • @Mahmoud Arafa 这个条件 abs(i - j) != -1 始终等于 true,与比较值无关。:)
  • @Borgleader 只是他没有时间包含所有 C++ 头文件。:)
  • 如果你认为每个数字都小于每个数字,你期望得到什么结果?

标签: c++ sorting


【解决方案1】:

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

【讨论】:

  • 我知道了,但我尝试修改函数以便它可以提供严格的弱排序,但我做不到。有什么帮助吗?
  • @MahmoudArafa 你试过 i
【解决方案2】:

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

假设您要按升序排序。只需使用operator &lt;

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

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

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

查看 cmets 中的链接或@DanielDaranas 提供的答案,了解您的原始功能为何不起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    相关资源
    最近更新 更多