排序 C++ - "invalid operator"
sort C++ - "invalid operator"
#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
函数不提供严格的弱排序。如果i
和j
相等,它将返回 true。所以你没有遵守规则。标准库的实现通过引发异常来响应。
如何修改此函数以使程序正常运行?
假设您要按升序排序。只需使用operator <
.
bool fun(int i, int j)
{
return i < j;
}
或者,您也可以只使用标准品提供的比较器。
sort(v.begin(), v.end(), std::less<int>());
请参阅评论中的链接或@DanielDaranas提供的答案,以了解原始函数不起作用的原因。
相关文章:
- 如何解决"invalid conversion from 'char' to 'const char*'"
- 为什么 std::optional::operator=(U&&) 要求你是非标量类型?
- 'operator='已弃用:改用 QDir::setPath()
- 如何处理 c++ 中类实现中的"invalid use of non-static data member"?
- 过载'operator new'如何导致无限循环?
- C++ "error: invalid use of void expression"
- 与'operator='不匹配(操作数类型'String'且"void")
- SegFault 同时使用 std::string::operator+= 和函数作为参数
- 收到错误"invalid use of non-static data member 'stu::n' "
- 处理"no operator found"
- 如何编写 operator= 用于使用虚拟方法与非平凡成员的匿名联合
- 运算符重载:"operator+"必须采用零个或一个参数
- 如何'Invalid conversion'和'no match for operator'更正这些 c++ 错误
- 为什么我会得到"Invalid use of :: (scope resolution operator)?"
- 排序 C++ - "invalid operator"
- 标准::设置比较器错误:"invalid operator<"
- STL 减少操作员和"invalid operator<"误差
- 自定义有序集给出查找"invalid operator<"(...
- 重载比较运算符C++会导致"invalid operator<"
- 具有额外参数'invalid operator <'的 c++ STL 排序