如何在列表中删除重复项并只保留唯一指针
How to remove duplicates and keep only unique pointers in 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::sort
是N*log(N)
,而std::unique
是线性的。因此,如果您打算经常执行这些重复删除,最好首先使用std::set
。还要注意,在C++11中有std::unordered_set,它具有元素唯一性和插入和删除的平均常数复杂性。
如果您不关心插入顺序,请使用set
而不是list
。它只能有唯一的元素,它会自动进行其他人推荐的排序。
如果你真的关心插入顺序,可以这样做:
auto i = std::find(persons.begin(), persons.end(), pPerson);
if(i != persons.end())
persons.erase(i);
persons.insert(pPerson);
(我没有编译)
根据列表所指向的地址对列表进行排序。使用简单循环删除重复项。
相关文章:
- 指针保留字符串
- 保留函数指针模板参数
- 如何在成为指向基类的指针后保留对子类方法的使用?
- 保留计时器集合(对象与指针)的最佳方法
- 更改保留指向其字段的原始指针的对象地址
- 释放指向保留嵌套变量内存地址的结构的指针
- 如果引用应该保留,不删除析构函数中的指针会导致内存泄漏吗?
- 如何在字符指针数组中保留指向每个单词的指针?
- 指向结构的指针保留某些属性,同时将其他属性重置为零(使用 map)
- 即使阵列腐烂到指针,如何将函数的参数保留为数组,这很好
- clock_nanosleep - 请求和保留的相同指针
- 如何在不覆盖C 中保留指针的价值
- 无法保留指向内存的指针
- 结构中的C++数组指针保留内存位置,但丢失所有值
- 删除动态数组,但保留指针
- 如何在参数中传递双重指针,以保留值
- C++:为指向两种类型之一的指针保留打开选项
- 非NULL保留指针值
- 实例变量列表中的对象未被保留?指针问题
- 在函数中保留指针是否会导致内存泄漏