我正在尝试为set
创建自定义排序方法,但编译器不会运行它。
例如,我们插入以下数字:2 3 5 4,set
将从最低值到最高值对它们进行排序,但是如果我想要从最高到最低值呢?
对于:2 3 5 4,而不是像这样排序2 3 4 5,我想要5 4 3 2。
我写了以下代码:
#include <iostream>
#include <set>
#include <iterator>
using namespace std;
struct SortOrder {
bool operator()(const int &first,const int &last) {
if (first < last);
return (first < last);
return (first > last);
}
};
int main(){
set<int,SortOrder> date;
set<int>::iterator it;
date.insert(2);
date.insert(3);
date.insert(5);
date.insert(4);
for (it = date.begin(); it != date.end(); ++it) {
cout << *it <<" ";
}
return 0;
}
答案 0 :(得分:0)
您的比较器实现不正确,正如deepmax所解释的那样:只有当两个项目彼此相等时,您的运算符才会返回false
;在所有其他情况下,它返回true
,有效地使其成为“不相等”的运算符。
您不必编写自己的实现,因为C ++标准库为您提供了一个实现:
set<int,std::greater<int>> date;
std::greater<int>
是您想要的比较器(demo)。
set<int,std::greater<int>> date {2, 3, 5, 4};
ostream_iterator<int> out_it (cout, " ");
copy (date.begin(), date.end(), out_it );