0

在我的应用程序中,我有一个 CString 值的 CMap。在 Map 中添加元素后,如果我在其他地方检索元素,则不会按插入顺序获取元素。假设我检索第三个元素,我会得到第五个这样的元素。它是 CMap 的一种行为吗?为什么会发生这种情况?

4

2 回答 2

8

你问“为什么”,所以这里是:

Map 提供了一种通过键检索值的有效方法。它通过使用比列表或数组更快的巧妙数据结构来做到这一点(在您知道元素是否在其中之前,您必须搜索整个列表)。需要权衡取舍,例如内存使用量增加,以及无法做一些其他事情(例如知道插入的顺序)。

有两种常见的实现方式

  • 一个哈希映射,它通过哈希值将键放入桶中。
  • 树图,根据键的排序方式将键排列成二叉树

您可以迭代地图,但这将取决于它们在内部的存储方式,无论是键顺序(树图)还是完全不可预测的(哈希图)。您的 CMap 似乎是一个哈希图。

无论哪种方式,都不会保留插入顺序。如果需要,您需要一个额外的数据结构(例如列表)。

于 2013-03-21T08:47:41.113 回答
3

如何阅读 CMap 的文档? http://msdn.microsoft.com/ru-ru/library/s897094z%28v=vs.71%29.aspx

真的是无序地图。你如何检索元素?通过GetStartPositionGetNextAssochttp://msdn.microsoft.com/ru-ru/library/d82fyybt%28v=vs.71%29.aspx在这里阅读备注

评论

迭代顺序是不可预测的;因此,“地图中的第一个元素”没有特殊意义。

CMap 是一个字典集合类,它将唯一键映射到值。将键值对(元素)插入映射后,您可以使用键有效地检索或删除该对来访问它。您还可以遍历地图中的所有元素。

于 2013-03-21T08:40:32.627 回答