为什么从CMap中检索元素是无序的
Why retrieving elements from CMap is not ordered
在我的应用程序中,我有一个CMap的CString值。在Map中添加元素之后,如果我在其他地方检索元素,则不会按照插入顺序获得元素。假设我检索到第三个元素,得到第五个元素。这是CMap的行为吗?为什么会这样呢?
你问的是"为什么",所以是这样的:
Map提供了一种按键检索值的有效方法。它通过使用一种聪明的数据结构来实现这一点,这种数据结构比列表或数组要快(在列表或数组中,您必须搜索整个列表才能知道元素是否在其中)。有一些权衡,比如增加内存使用,以及无法做一些其他事情(比如知道插入的顺序)。
有两种常见的方法来实现这个
- 一个哈希映射,它将键按哈希值放入桶中。
- 一个树状图,根据键的排序方式将键排列成二叉树
你可以遍历映射,但这将取决于它们在内部的存储方式,要么是键顺序(treemap),要么是完全不可预测的(hashmap)。你的CMap好像是一个hashmap。
无论哪种方式,插入顺序都不保留。如果需要,则需要一个额外的数据结构(如列表)。
如何读取文档到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阅读此处备注
评论
迭代顺序不可预测;因此,"map中的第一个元素"没有特殊的意义
CMap是一个字典集合类,它将唯一的键映射到值。一旦将键-值对(元素)插入到映射中,就可以使用键来访问它,从而有效地检索或删除该对。您还可以遍历映射中的所有元素
- c++找不到具有相同哈希的无序集合元素
- 从C++无序集合中高效提取元素
- 打印无序映射的第二个元素,即集合
- gtest 期望无序元素与自定义比较器/匹配器一起使用
- 如何从一个无序集合中获取一个元素
- 在无序地图中替换元素
- 设置要与无序集合一起使用的自定义类 - 在集合中找不到元素
- 循环遍历向量中的所有(无序)元素对
- 添加元素<字符串、指针>以提升无序哈希图
- 将向量的元素添加到无序集合中
- 打印无序集合的元素
- 无序映射插入复制元素
- 正在从无序多重映射中删除元素
- 使用结构的特定字符串元素定义无序映射键
- C++:将元素从无序集合复制到向量
- 填充一个无序的vector元素指针队列
- 无序集合哈希表中元素的排序
- 为什么从CMap中检索元素是无序的
- 无序多映射元素插入
- 空的无序多重集合中的元素