如何删除重复项并在列表中只保留唯一指针?

Dam*_*mir 1 c++ stl

可能重复:
如何使向量元素唯一?(删除非相邻的重复项)
从列表<int>中删除重复项

我有一些指针列表

std::list<Person*> persons;
Run Code Online (Sandbox Code Playgroud)

填写期间此列表中有重复项.如何删除重复项并保留列表中唯一的指针?

jua*_*nza 8

如果您可以更改元素的顺序,则首先使用list :: sort对列表进行排序,然后使用list :: unique删除重复项.

std::less<Person*> cmp;
persons.sort(cmp);
persons.unique(cmp);
Run Code Online (Sandbox Code Playgroud)

另一方面,您可以使用std :: set.它的元素是唯一的,有序的,如果元素已经存在于集合中,则插入方法将失败.

请记住,插入单个元素的时间复杂度是对数的,而在列表的前面或后面添加元素是常量时间.另一方面,std::list::sortN*log(N),并且std::unique是线性的.因此,如果您打算经常执行这些重复删除,那么最好std::set先使用a .另请注意,在C++ 11中有std :: unordered_set,它具有元素唯一性和插入和删除的平均常量复杂度.