0

我有一个

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

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

我怎样才能摆脱重复

我试过:

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

但这是未定义的行为,因为在我的问题中没有为指针定义运算符 <。

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

4

2 回答 2

6

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

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

但是,我想指出这std::list::sort并不是特别有效,因为列表不提供随机访问。

于 2013-09-29T10:57:50.003 回答
1

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

于 2013-09-29T11:00:04.477 回答