是否可以直接访问多映射中的位置(不是键)

Is it possible to directly access a position (not a key) in a multimap

本文关键字:位置 映射 访问 是否      更新时间:2023-10-16

问题:如何在没有循环的情况下访问键范围内指定位置的值?
我知道获取此数据的唯一可能方法是递增迭代器,无论位置从键范围的开头或结尾开始的次数。

编辑 我不愿意使用循环的原因是,当值在索引中的位置已知时,通过获取所需的值来减少处理时间。

正如评论中正确指出的那样,您基本上无法在multimap上执行此操作。或者在map.或者在不支持随机访问的任何容器上。对于"为什么我不能这样做?"这个问题的简单答案是"因为它不在界面中"。

较长的答案需要对不同容器的实现有最低限度的了解。例如,vector的元素因此存储在内存中。知道i -th 元素的地址后,您可以添加k并获取i+k -th 元素的地址。

地图

(和多重地图)是不同的。为了允许一种有效的关联访问方式,他们使用某种树作为底层数据结构。最简单的是二叉搜索树。树的所有节点都分配在堆中。在实际访问它们之前,您不知道在哪里。但是您只能通过其他节点访问节点。

您可以做的是遍历所有元素并将其地址存储在向量中,以便现在可以"随机"访问它们。但是,一旦添加新元素或从地图中删除元素,此向量将失效。没有神奇的数据结构可以同时允许您进行有效的关联和随机访问。