为什么不从CMap中检索元素

Cod*_*der 0 c++ mfc map

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

Thi*_*ilo 6

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

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

有两种常见的方法可以实现这一点

  • 一个hashmap,它通过哈希值将密钥放入桶中.
  • 树图,根据它们的排序方式将键排列到二叉树中

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

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