如何获取唯一指针列表?

Mar*_*dik 0 c++ pointers

我有一个

class Widget;
std::list<Widget*> listOfPointers;
Run Code Online (Sandbox Code Playgroud)

其中listOfPointers可能包含两个或多个指向同一对象的指针.所有指针都指向在堆上逐个创建的对象,而不是同一数组的成员.

我怎样才能摆脱重复

我试过了:

listOfPointers.sort();
listOfPointers.unique();
Run Code Online (Sandbox Code Playgroud)

但这是未定义的行为,因为在我的问题中没有为指针定义operator <.

我可以使用定义的运算符==将每个指针相互比较,但这会导致二次复杂度.

Mat*_* M. 6

您可以使用另一个sort使用比较器/二元谓词的重载,并提供std::less<Widget*>谓词:std::less有能力比较任意指针(因此您可以将它们set用作键或作为键map).

listOfPointers.sort(std::less<Widget*>());
listOfPointers.unique();
Run Code Online (Sandbox Code Playgroud)

但是,我想指出,std::list::sort由于列表不提供随机访问,因此效率不高.