有没有一个很好的和简单的方法来找到nth element
在C++
std::map
?特别是我正在寻找一种算法来清除map
中的最后一个k
元素。这将是有意义的检索迭代器到nth element
和呼叫std::map::erase
。要求是复杂度不会受到影响 - 应该可以擦除O(N)
中的元素范围。如何擦除C++映射中的最后n个元素?
不应仅仅为了擦除元素而复制数据。例如,一种解决方案是将数据复制到std::vector
中,然后在std::vector
上执行std::nth_element
,然后在std::map::find
上查找迭代器以便找出从哪里擦除。
其他解决方案之一是迭代std::map
维护一个计数器变量的要删除的元素数量。那会给O(n)
。有可能用STL algorithm
替换for
循环吗?
为什么'std :: map'没有提供一个'O(log(n))'解决方案来访问第n个元素? – Leonid 2010-09-20 11:08:58
删除“end() - 1”应该更有效。 – 2010-09-20 11:11:07
这听起来像是一个合理的解决方案斯蒂芬。 – Leonid 2010-09-20 11:11:49