2013-02-12 45 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