簡體   English   中英

Qt框架中的QMap與QList類

[英]QMap vs QList Class in the Qt framework

我試圖決定在將來的某些Qt項目中使用QList還是QMap類。 為了確定最適合我的選擇,我想確定它們的某些相似之處和不同之處,以便了解在某些情況下最有效的方法。 我對這些異同的理解正確嗎?

相似點:

  • 都是容器

  • 兩者都包含無序數據

區別:

  • QMap具有鍵值對,而QList僅具有值

  • QMap使用哈希函數將值放置在適當的索引中,而QList只是追加條目

還有更多相似和不同之處嗎?

我可以看一下通用的計算機科學定義,但我讀到某處Qt框架可能存在細微差別。

QListQMap的數據組織方式不同。 這導致不同的性能和稍微不同的內存消耗(在大多數情況下,后者通常無關緊要)。 您可以在Qt文檔中找到計算復雜性 如果要存儲很多元素,則可能會有很大的不同。 考慮選擇容器時要多久訪問一次數據(搜索vs.插入vs.刪除)。

[但是請記住,算法復雜度是僅對大n有效的理論屬性。 實際上,由於引用的局部性,通過具有少量元素(<1,000)的數組進行線性搜索通常優於列表/樹。 如果您不關心性能,請不要猜測,請務必進行評估。]

兩者都包含無序數據

對於QMap實際上並非如此。 QMap被實現為自平衡二進制搜索樹 ,它是一種排序的數據結構。

順便說一句:您通常可以以一種通用的方式來實現您的代碼,這使得以后可以輕松切換到另一個容器類型(例如,如果訪問模式更改或您的假設被證明是錯誤的)。 使用auto可以幫助您減輕痛苦。

我認為您對QMap犯了一些錯誤。

QMap始終保持其內容按鍵排序。 請參閱此處文檔 因此,它並非像您提到的那樣無序。

然后, QMap不使用哈希函數。 它通過將元素與operator<()進行比較來存儲元素。

實際上,您會混淆QMapQHash QHash確實是任意排序的,並且其元素需要提供用於比較的operator==()qHash(key)函數。

我認為它可以幫助您更好地了解需要使用的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM