为什么不从CMap中检索元素

时间:2013-03-21 08:38:08

标签: c++ map mfc

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

2 个答案:

答案 0 :(得分:6)

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

Map提供了一种按密钥检索值的有效方法。它通过使用一个比列表或数组更快的聪明的数据结构来实现这一点(在你知道元素是否在那里之前你必须搜索整个列表)。存在权衡,例如增加的内存使用量,以及无法做其他事情(例如知道插入事物的顺序)。

实现此

有两种常用方法
  • 一个hashmap,它通过哈希值将密钥放入桶中。
  • 一个树形图,根据它们的排序方式将密钥排列到二叉树中

您可以迭代地图,但它将根据它们在内部存储的方式,按键顺序(树形图)或完全不可预测(hashmap)。你的CMap似乎是一个hashmap。

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

答案 1 :(得分: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是一个字典集合类,它将唯一键映射到值。将键值对(元素)插入映射后,可以使用键来有效地检索或删除该对。您还可以迭代地图中的所有元素。