2013-03-21 359 views
0

在我的應用程序中,我有一個CString值的CMap。在Map中添加元素之後,如果我在其他位置檢索元素,則不會按照插入順序獲取元素。假設我檢索第三個元素,則獲得第五個元素。這是CMap的行爲嗎?爲什麼會發生?爲什麼從CMap中檢索元素沒有排序

+0

這是MFC嗎?你能提供一些代碼嗎? – Nick 2013-03-21 08:39:37

+0

我對CMap一無所知,但這就是地圖通常的工作方式。它們基於散列或基於訂單,兩者都不保留廣告訂單。 – Thilo 2013-03-21 08:39:43

+0

@Nick ya我正在談論MFC集合類。 – CodeRider 2013-03-21 08:41:07

回答

6

你問「爲什麼」,所以這裏有雲:

一個地圖提供了一種有效的方式通過鍵來檢索值。它通過使用一個比列表或數組更快的巧妙數據結構來實現這一點(在你知道某個元素是否存在或不存在的情況下,你必須搜索整個列表)。有一些權衡,如增加的內存使用率,以及無法做其他事情(例如知道事物被插入的順序)。

有實現這個

  • 一個HashMap,它通過散列值把鑰匙進入水桶兩種常用的方法。
  • 樹形圖,其中安排鍵爲二叉樹,根據它們的排序方式

可以遍歷地圖,但它會根據它們是如何存儲在內部,無論是按鍵的順序(樹圖)或完全不可預知(hashmap)。你的CMap似乎是一個hashmap。

無論哪種方式,插入順序不會保留。如果你想要的話,你需要一個額外的數據結構(如列表)。

3

如何將文檔讀取到CMap? http://msdn.microsoft.com/ru-ru/library/s897094z%28v=vs.71%29.aspx

真的是無序的地圖。你如何檢索元素?由GetStartPositionGetNextAssoc?這裏

http://msdn.microsoft.com/ru-ru/library/d82fyybt%28v=vs.71%29.aspx閱讀備註備註

迭代序列是不可預測的;因此,「地圖中的第一要素」沒有特別的意義。

CMap的是,獨特的鍵映射到值的字典集合類。將鍵值對(元素)插入到映射中後,可以使用鍵高效地檢索或刪除鍵對來訪問它。您也可以迭代地圖中的所有元素。

相關問題