在我的应用程序中,我有一个 CString 值的 CMap。在 Map 中添加元素后,如果我在其他地方检索元素,则不会按插入顺序获取元素。假设我检索第三个元素,我会得到第五个这样的元素。它是 CMap 的一种行为吗?为什么会发生这种情况?
2 回答
你问“为什么”,所以这里是:
Map 提供了一种通过键检索值的有效方法。它通过使用比列表或数组更快的巧妙数据结构来做到这一点(在您知道元素是否在其中之前,您必须搜索整个列表)。需要权衡取舍,例如内存使用量增加,以及无法做一些其他事情(例如知道插入的顺序)。
有两种常见的实现方式
- 一个哈希映射,它通过哈希值将键放入桶中。
- 树图,根据键的排序方式将键排列成二叉树
您可以迭代地图,但这将取决于它们在内部的存储方式,无论是键顺序(树图)还是完全不可预测的(哈希图)。您的 CMap 似乎是一个哈希图。
无论哪种方式,都不会保留插入顺序。如果需要,您需要一个额外的数据结构(例如列表)。
如何阅读 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 是一个字典集合类,它将唯一键映射到值。将键值对(元素)插入映射后,您可以使用键有效地检索或删除该对来访问它。您还可以遍历地图中的所有元素。