#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;。如何修改此功能以使程序正常运行?
答案 0 :(得分:4)
您的fun
函数未提供严格弱排序。如果i
和j
相等,则返回true。所以你不遵守规则。您对标准库的实现通过抛出异常来响应。
答案 1 :(得分:2)
如何修改此功能以使程序正常运行?
假设您要按升序排序。只需使用operator <
。
bool fun(int i, int j)
{
return i < j;
}
或者您可以使用标准提供的比较器。
sort(v.begin(), v.end(), std::less<int>());
请参阅评论中的链接或@DanielDaranas提供的答案,以了解您的原始功能无法正常工作的原因。