Par*_*esh 2 c++ stl set comparator
我有一个类,并且指向这个类的对象的指针需要放在一个std::set.我想要定义的比较里面的类.我已经看到了一些解决方案,其中定义了一个单独的类(我猜它被称为仿函数),或者定义了一个重载的结构operator().我想避免使用这个样板代码,并希望将比较器定义为类本身的成员,这与Java的compareTo()方法类似.
让我们说,我的班级是这样的:
class Item {
private:
int id;
float score;
.....
public:
// Rest of the methods and setters/getters
}
Run Code Online (Sandbox Code Playgroud)
我想以一种方式定义比较器,指向具有较高分数的对象的指针首先放在集合中.如果两者的分数相等,则首先放置具有较低id的分数.我想代码将类似于以下内容,但由于我不太了解这一部分,请纠正我(我希望将其放在类本身内):
bool operator()(const Item* a, const Item* b) {
if (a->score != b->score) return a->score > b->score;
return a->id < b->id;
}
Run Code Online (Sandbox Code Playgroud)
用法如下:
std::set<Item*> sortedItems;
Item* item = new Item();
sortedItems.insert(item);
Run Code Online (Sandbox Code Playgroud)
std::set如果在类中定义,我不确定是否需要在模板中指定比较器,如果是,如何?另外,如何在类本身中添加此比较器?我是STL的新手,也是C++的新手.谢谢!
这个解决方案的灵感来自这个答案.
#include <set>
class Item {
private:
int id;
float score;
public:
struct compare {
bool operator()(const Item* a, const Item* b) {
if (a->score != b->score) return a->score > b->score;
return a->id < b->id;
}
};
};
Run Code Online (Sandbox Code Playgroud)
因为set允许您定义自己的比较方法,所以您可以按如下方式使用它.
std::set<Item*, Item::compare> sortedItems;
Run Code Online (Sandbox Code Playgroud)
这应该允许您的类Item使用set
| 归档时间: |
|
| 查看次数: |
1617 次 |
| 最近记录: |