使用 std::less 作为一组指针

Using std::less for a set of pointers

我有一些 class 声明的集合是这样的:

std::set<UPFIR::RetentionSignal*> _retSignalSet; 

我正在尝试对其使用 std::less 比较功能。我试过这样的事情:

std::set<UPFIR::RetentionSignal*, std::less<UPFIR::RetentionSignal*>> _retSignalSet; 

我得到的反馈是“添加 std::less 不会使其成为确定性。你必须比较名称”,有人可以解释一下我如何实现这一点,因为我还没有使用 std::less之前?

谢谢

如果要求集合应按名称排序,那么 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 被定义为提供指针的总顺序。您收到的订单可能不是完成任务所需的订单。