使用Functor在集合中创建自定义排序方法

时间:2015-12-22 11:56:21

标签: c++ sorting set

我正在尝试为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;
}

1 个答案:

答案 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 );