提问人:Danger69420 提问时间:12/6/2021 最后编辑:EnlicoDanger69420 更新时间:12/7/2021 访问量:270
将 std::less 用于一组指针
Using std::less for a set of pointers
问:
我有一个类,我声明了一个这样的集合:
std::set<UPFIR::RetentionSignal*> _retSignalSet;
我正在尝试在其上使用 std::less 比较功能。我尝试了这样的事情:
std::set<UPFIR::RetentionSignal*, std::less<UPFIR::RetentionSignal*>> _retSignalSet;
我得到的反馈是“添加 std::less 不会使它成为确定性。你必须比较这个名字“,有人可以解释一下我如何做到这一点,因为我以前没有使用过 std::less ?
谢谢
答:
0赞
j6t
12/7/2021
#1
如果要求是集合应按名称排序,则无济于事。您必须提供一个自定义比较器来比较名称。例如(只是一个未经测试的草图):std::less
struct LessByName {
bool operator<(UPFIR::RetentionSignal* a, UPFIR::RetentionSignal* b)
{
return a->name < b->name;
}
};
然后像这样使用它
std::set<UPFIR::RetentionSignal*, LessByName> _retSignalSet;
顺便说一句,注释“不会使它确定性”是错误的,因为被定义为提供指针的总顺序。您获得的订单可能不是完成任务所需的订单。std::less
std::less
评论
0赞
Danger69420
12/7/2021
嗨@j6t这对于在 main 中定义的集合非常有效,但是如果该集合是在类中声明的,该怎么办: class foo { private: std::set<UPFIR::RetentionSignal*> _retSignalSet; }
0赞
j6t
12/7/2021
@Danger69420 问题出在哪里?如果将定义移动到定义之前的类中,会有帮助吗?struct LessByName
std::set... _retSignalSet
0赞
Danger69420
12/9/2021
是的,在类内移动结构体工作得很好,谢谢。
评论
std::less
std::less
RetentionSignal