假设我有一个包含100000个元素的向量,我希望逐个遍历向量,同时将元素复制到某种类型的映射中,但在每次迭代中,从向量中删除元素 - 什么是最有效的方法吗?
在遍历向量的同时,我做了类似"它= vec.erase(it)"但它需要绝对的年龄才能完成。有没有更快的方法?作为旁注,订购非常重要......
答案 0 :(得分:4)
没有。您正在将矢量用作队列。这违背了它的设计。
你有几个选择。以下是立即想到的:
不要一次删除一个项目。分批进行。
将矢量用作环形缓冲区,只需前进一个索引,但不要删除元素。
使用更合适的容器,例如std::deque
。
答案 1 :(得分:0)
由于向量中元素的顺序不重要 - 无论如何你都将它们放在地图中 - 简单的解决方案是将第一个元素与最后一个元素交换,然后删除最后一个元素。那会更快。
答案 2 :(得分:-2)
如果您需要使用vector
,那么根据您的要求,您应该使用vector
指向动态分配的对象实例而不是vector
个对象本身