如何获取唯一指针列表?

时间:2013-09-29 10:52:24

标签: c++ pointers

我有一个

class Widget;
std::list<Widget*> listOfPointers;

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

我如何摆脱重复

我试过了:

listOfPointers.sort();
listOfPointers.unique();

但是这是operator < is not defined for pointers in my problem.

以来未定义的行为

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

2 个答案:

答案 0 :(得分:6)

您可以使用使用比较器/二元谓词的sort的其他重载,并提供std::less<Widget*>作为谓词:std::less有幸能够比较任意指针(这样您就可以在set中使用它们或在map中使用它们。)

listOfPointers.sort(std::less<Widget*>());
listOfPointers.unique();

但是,我想指出std::list::sort由于列表不提供随机访问而不是特别有效。

答案 1 :(得分:1)

技术上确实,指向不在同一数组中的对象的指针无法与关系运算符进行比较。在实践中,结果将在您可能遇到的每个编译器上得到明确定义和一致,并且将是std :: sort所需的严格弱序。