使用 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 );
我正在尝试为 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 );