1

是否有一个独特的容器,例如std::list具有简单功能(push、、、popclear)并且不像排序顺序不同std::set,或者我可能需要扩展 std::list和添加我自己的push_unique方法))?

4

1 回答 1

6

STL 应该提供高效的容器。

不允许重复的容器需要支持快速查找以确定您想要的值是否已经存在于集合中。

std::set保持项目在红黑树中排序,这是允许 O(log(n)) 查找、插入和删除的原因。

std::unsorted_set允许恒定时间的查找、插入和删除,但是您需要为大多数 UDT 类型提供哈希函数,您需要处理诸如重新哈希之类的问题,这会导致迭代器失效,并且您没有为您的任何定义的顺序项目(甚至不是广告订单)。

如果您想使用简单的集合(例如std::vector不允许重复),则需要提供自己的适配器。

但是,我仍然无法弄清楚为什么您对排序容器有问题,例如std::set,正如您所说,顺序对您来说并不重要。

于 2013-02-12T13:48:22.073 回答