在我的應用程序中,我有一個CString值的CMap。在Map中添加元素之後,如果我在其他位置檢索元素,則不會按照插入順序獲取元素。假設我檢索第三個元素,則獲得第五個元素。這是CMap的行爲嗎?爲什麼會發生?爲什麼從CMap中檢索元素沒有排序
0
A
回答
6
你問「爲什麼」,所以這裏有雲:
一個地圖提供了一種有效的方式通過鍵來檢索值。它通過使用一個比列表或數組更快的巧妙數據結構來實現這一點(在你知道某個元素是否存在或不存在的情況下,你必須搜索整個列表)。有一些權衡,如增加的內存使用率,以及無法做其他事情(例如知道事物被插入的順序)。
有實現這個
- 一個HashMap,它通過散列值把鑰匙進入水桶兩種常用的方法。
- 樹形圖,其中安排鍵爲二叉樹,根據它們的排序方式
可以遍歷地圖,但它會根據它們是如何存儲在內部,無論是按鍵的順序(樹圖)或完全不可預知(hashmap)。你的CMap似乎是一個hashmap。
無論哪種方式,插入順序不會保留。如果你想要的話,你需要一個額外的數據結構(如列表)。
3
如何將文檔讀取到CMap? http://msdn.microsoft.com/ru-ru/library/s897094z%28v=vs.71%29.aspx
真的是無序的地圖。你如何檢索元素?由GetStartPosition
和GetNextAssoc
?這裏
http://msdn.microsoft.com/ru-ru/library/d82fyybt%28v=vs.71%29.aspx閱讀備註備註
迭代序列是不可預測的;因此,「地圖中的第一要素」沒有特別的意義。
CMap的是,獨特的鍵映射到值的字典集合類。將鍵值對(元素)插入到映射中後,可以使用鍵高效地檢索或刪除鍵對來訪問它。您也可以迭代地圖中的所有元素。
相關問題
- 1. 爲什麼這個散列表中的元素沒有按預期排序
- 2. 檢查元素有什麼
- 3. 爲什麼ul元素沒有高度?
- 4. 爲什麼我的TStringList沒有排序?
- 5. 爲什麼我的插入排序沒有得到第一個元素?
- 6. BeautifulSoup.find_all沒有檢索網頁的元素
- 7. 排序索引元素
- 8. 我不明白爲什麼這兩個元素沒有並排排列?
- 9. 爲什麼'toSet'方法混淆了ListBuffer中元素的排序?
- 10. 爲什麼Python字典的元素沒有得到序列
- 11. 爲什麼Z-索引中沒有被安排一個StackPanel
- 12. 從Backbone.Collection.remove(n)檢索元素
- 13. 爲什麼在索引1中沒有元素時,不會拋出java.lang.StringIndexOutOfBoundsException異常?
- 14. 爲什麼Haskell沒有單個元素元組?
- 15. 爲什麼在javascript中的元素的寬度沒有增加
- 16. 爲什麼元素沒有被插入到數組中?
- 17. Bubblesort不會排序超過254859個元素 - 爲什麼?
- 18. 從touchmove中檢索回覆的元素
- 19. C - 從列表中檢索元素
- 20. 如何從XElement中檢索元素
- 21. 從文本中檢索父html元素
- 22. 從創建列表中檢索元素
- 23. 爲什麼從我的BerkerleyDB HashDatabase檢索遊標不是按照升序排列
- 24. 爲什麼不能從句柄拖動jQuery UI可排序元素?
- 25. 爲什麼os.rename程序沒有排序目錄
- 26. 爲什麼我的程序沒有正確排序?
- 27. 爲什麼我的程序(sort_them函數)沒有排序?
- 28. Codeigniter - 從MySQL中排序檢索的值
- 29. 排序元素
- 30. 爲什麼沒有排序爲IList <T>?!?! (編輯)
這是MFC嗎?你能提供一些代碼嗎? – Nick 2013-03-21 08:39:37
我對CMap一無所知,但這就是地圖通常的工作方式。它們基於散列或基於訂單,兩者都不保留廣告訂單。 – Thilo 2013-03-21 08:39:43
@Nick ya我正在談論MFC集合類。 – CodeRider 2013-03-21 08:41:07