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

时间:2013-12-17 05:47:07

标签: c++ iterator multimap

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

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

1 个答案:

答案 0 :(得分:5)

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

较长的答案需要对不同容器的实现有一个最小的理解。因此,vector的元素存储在存储器中。知道i - 元素的地址,您可以添加k并获取i+k - 元素的地址。

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

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