繁体   English   中英

获取地图迭代器索引的最有效方法? C ++

[英]Most efficient way to get the index of an iterator for a map? C++

线程类似,我正在尝试从迭代器获取整数索引,但要获取映射而不是向量。 Atm在我的代码中造成了很大的瓶颈,我想知道是否有比我目前正在做的更有效的方法来获取索引...

auto itTail = nodesMap.find(tail);
tailNodePos = distance(nodesMap.begin(), itTail);

我会说不可能以比O(container size)更快的速度(根据C ++标准中的map规范O(container size)来获取map的任意迭代器的索引。 如果非常重要的是要快得多,那么我将尝试使用自定义平衡二叉搜索树(因为如果树中的每个节点都可以以O(log(container size))获得树中一个节点的索引,保持子树大小)。
而且,如果没有执行插入和删除操作,则很容易使用有序的vectorlower_bound而不是map and find (此方法允许获取O(1)的索引,因为vector迭代器是随机访问迭代器)。

如果要使用具有快速索引(第n个元素和元素索引)和快速排序的插入/删除的容器,则必须编写自己的容器,或在std之外找到一个容器。

设计并不是那么棘手-b-树或rb-树,其中每个节点还可以统计下面的节点数,而“裸”节点的开销却很小。 编写接口的其余部分以匹配std::map就像编写原始树操作代码一样,是一个口号。

几年前,我试图找到一个boost ,但失败了。 也许是带有多索引容器的东西:但是在这里,顺序是插入顺序,而不是地图顺序组件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM