在我的应用程序中,我有一个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