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

Using Functor to make a custom sort method in sets

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

您的比较器实现不正确,正如 deepmax 所解释的:您的运算符 returns false 仅当两个项目彼此相等时;在所有其他情况下,它 returns true,有效地使其成为 "not equal" 运算符。

您不必编写自己的实现,因为 C++ 标准库为您提供了一个实现:

set<int,std::greater<int>> date;

std::greater<int> is the comparator that you want (demo).

set<int,std::greater<int>> date {2, 3, 5, 4};
ostream_iterator<int> out_it (cout, " ");
copy (date.begin(), date.end(), out_it );