为什么从CMap中检索元素是无序的

Why retrieving elements from CMap is not ordered

本文关键字:无序 元素 检索 CMap 为什么      更新时间:2023-10-16

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

你问的是"为什么",所以是这样的:

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

有两种常见的方法来实现这个

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

你可以遍历映射,但这将取决于它们在内部的存储方式,要么是键顺序(treemap),要么是完全不可预测的(hashmap)。你的CMap好像是一个hashmap。

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

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

这是一个无序的映射。如何检索元素?通过GetStartPositionGetNextAssoc ?http://msdn.microsoft.com/ru-ru/library/d82fyybt%28v=vs.71%29.aspx阅读此处备注

评论

迭代顺序不可预测;因此,"map中的第一个元素"没有特殊的意义

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