c++ - 如何删除重复项并仅保留列表中的唯一指针?

标签 c++ stl

<分区>

Possible Duplicate:
How to make elements of vector unique? (remove non adjacent duplicates)
Remove duplicates from a list<int>

我有像这样的指针列表

std::list<Person*> persons;

而且这个列表在填写的时候有重复项。如何删除重复项并只保留列表中的唯一指针?

最佳答案

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

std::less<Person*> cmp;
persons.sort(cmp);
persons.unique(cmp);

另一方面,您可以使用 std::set .它的元素是唯一的、有序的,并且 insert如果元素已存在于集合中,则方法失败。

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

关于c++ - 如何删除重复项并仅保留列表中的唯一指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12038482/

相关文章:

c++ - WinAPI:OpenProcess() 返回错误 5,并为主机进程启用了 SeDebugPrivilege

c++ - 使用 OnComponentHit UE4 C++ 进行碰撞检测

c++ - 如何使用媒体基础从 MP4 视频中丢弃任意帧?

c++ - 如何设置 Windows 文件打开对话框过滤器以包含 'must finish with' 选择

c++ - 为什么在分配/取消分配一些小对象后内存不可重用?

c++ - 类型衰减 STL 迭代器

C++ STL map::erase a non-existing key

c++ - 具有固定输入行数的 Qt 文本编辑

c++ - vector 中 N 个最小值的索引

c++ - 寻找已排序的容器,其中指向元素的指针在添加/删除时不会改变