2013-02-12 48 views
1

有没有像std::list用简单的功能(pushpopclear等),而不是的排序顺序不同std::set这样一个独特的容器,或者也许我需要延长std::list,并添加自己的push_unique法)) ?简单独特的STL容器

+3

您可能正在寻找'std::(tr1::) unordered_set'。 – zwol 2013-02-12 13:38:58

+1

您是否希望插入顺序保持不变? – juanchopanza 2013-02-12 13:39:40

+0

您是否需要容器来保留推入其中的物品的顺序? – 2013-02-12 13:44:06

回答

6

该STL应该提供有效的容器。

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

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

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

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

但是,如果像您说的那样,顺序对您无关紧要,我仍然无法弄清楚为什么您会遇到排序容器问题,如std::set