2012-04-20 72 views
1

Qt提供了一組STLcontainers.Qt容器 - 我應該選擇哪種容器?

然而,沒有容器可用,哪些商店有序值由它們的順序(如std::setQSet因爲某些原因行爲就像std::unordered_set。我意識到,在調用「set」數據結構中查找可能是一件好事,但我當然不明白爲什麼做出這個決定。

我應該使用哪種容器來存儲有序項集合(我懷疑QMap與虛構值是一個非常糟糕的選擇)爲什麼不Qt提供類似std::set

我猜這背後可能有一些技術原因,但不幸的是,我想不出一個。

+8

如果你想要'std :: set',爲什麼不使用...'std:set'? – 2012-04-20 18:40:26

+0

你可以使用'std :: set',Qt的容器並不是爲了完全反映C++標準庫(注意缺少多重集或單向轉發鏈表),你可以使用C++容器來存儲Qt對象。 – birryree 2012-04-20 18:42:40

+0

@birryree嗯,我不想在一個項目中混合使用'STL'和'Qt'容器。它們有不同的實現細節(例如寫入時拷貝)和'Qt'容器實際上試圖*鏡像*'STL'。他們甚至包括'STL'類接口('push_back'和'append')來提供這種兼容性。 – 2012-04-20 18:45:44

回答

3

維基百科:

Haavard Nord和的Eirik Chambe-ENG(Qt的原開發者和CEO兼總裁,分別奇趣)於1991年

開始 「的Qt」 的發展

同樣來自維基百科,關於STL:

貝爾實驗室的安德魯·柯尼希還沒有意識到的工作,並要求在斯捷潘諾夫的1993年11月會議上提出的主要思路用於C++標準化的ANSI/ISO委員會。該委員會的迴應非常有利,並導致Koenig及時提出要求在1994年3月會議上提出正式提案。儘管面臨巨大的時間壓力,Alex和Meng能夠提出一份在該次會議上獲得初步批准的提案。

而且從自己的男人:

「正如我經常說,我認爲不送貨較大的標準庫我最大的錯誤。」 --Bjarne Stroustrup

Qt獨立開發。所以就這樣了。使用QMap並繼續你的生活。 :)

(注:有Qt中無序的地圖,這就是所謂的QHash

如果你不能想到的有用或有趣的投入在價值插槽的東西,那麼你的程序可能是沒有足夠的複雜程度來做文章。您的關鍵對象中是否有數據成員可以輕鬆地在地圖中創建值?你真的不會想到要放在那裏的東西嗎?

如果實際上每個條目都浪費了一個字符,那麼這是否是系統中真正的瓶頸?你有指標證明這一點?等等。

+2

順便說一句,從其他我使用pre-STL的類庫中,「set」這個詞與「unordered」是同義詞,並且一般通過調整散列表的大小來實現。所以我很驚訝地發現'std :: set'有順序。 (如果有什麼我會期望它是無序的,並有一個名爲'std :: ordered_set'的「異常」類,而不是相反!) – HostileFork 2012-04-29 14:32:12