我有一些指针列表
std::list<Person*> persons;
Run Code Online (Sandbox Code Playgroud)
填写期间此列表中有重复项.如何删除重复项并保留列表中唯一的指针?
如果您可以更改元素的顺序,则首先使用list :: sort对列表进行排序,然后使用list :: unique删除重复项.
std::less<Person*> cmp;
persons.sort(cmp);
persons.unique(cmp);
Run Code Online (Sandbox Code Playgroud)
另一方面,您可以使用std :: set.它的元素是唯一的,有序的,如果元素已经存在于集合中,则插入方法将失败.
请记住,插入单个元素的时间复杂度是对数的,而在列表的前面或后面添加元素是常量时间.另一方面,std::list::sort是N*log(N),并且std::unique是线性的.因此,如果您打算经常执行这些重复删除,那么最好std::set先使用a .另请注意,在C++ 11中有std :: unordered_set,它具有元素唯一性和插入和删除的平均常量复杂度.
| 归档时间: |
|
| 查看次数: |
962 次 |
| 最近记录: |