是否可以直接访问多映射中的位置(不是键)
Is it possible to directly access a position (not a key) in a multimap
问题:如何在没有循环的情况下访问键范围内指定位置的值?
我知道获取此数据的唯一可能方法是递增迭代器,无论位置从键范围的开头或结尾开始的次数。
编辑 我不愿意使用循环的原因是,当值在索引中的位置已知时,通过获取所需的值来减少处理时间。
正如评论中正确指出的那样,您基本上无法在multimap
上执行此操作。或者在map
.或者在不支持随机访问的任何容器上。对于"为什么我不能这样做?"这个问题的简单答案是"因为它不在界面中"。
较长的答案需要对不同容器的实现有最低限度的了解。例如,vector
的元素因此存储在内存中。知道i
-th 元素的地址后,您可以添加k
并获取i+k
-th 元素的地址。
(和多重地图)是不同的。为了允许一种有效的关联访问方式,他们使用某种树作为底层数据结构。最简单的是二叉搜索树。树的所有节点都分配在堆中。在实际访问它们之前,您不知道在哪里。但是您只能通过其他节点访问节点。
您可以做的是遍历所有元素并将其地址存储在向量中,以便现在可以"随机"访问它们。但是,一旦添加新元素或从地图中删除元素,此向量将失效。没有神奇的数据结构可以同时允许您进行有效的关联和随机访问。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 将值指定给向量(2D)的向量中的某个位置
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 将函数类成员映射到类本身内部
- 使用Unreal C++获取VR耳机的世界位置/方向
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 使用std::函数映射对象方法
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- OpenGL 4.3 错误地将第 4 个纹理坐标映射到与第 3 个纹理坐标相同的位置
- 映射唯一值和重复值的有效方法.可以访问键或值的位置
- 如何在下一次函数调用中使用 STL 映射擦除从最后一个位置
- 是否可以直接访问多映射中的位置(不是键)
- 将图像重新映射到不同大小并查找像素位置
- 我可以在OpenCV中使用重映射来获得点位置吗
- 如何在不实际插入的情况下找到元素将插入std::映射的位置
- C++映射从迭代器位置开始搜索
- C++中特定位置的映射的迭代器
- 无序映射位置返回的对的类型
- 迭代器如何映射/知道它们的当前位置或元素