有没有一种好而简单的方法来查找C++ std::map中的第n个元素?特别是我正在寻找一种算法来从map中删除最后k个元素。这将有助于检索到第n个元素的迭代器并调用std :: map :: erase。要求复杂度不受影响-应该可以在O(N)中擦除元素范围。
不应该只为了删除元素而进行数据副本。例如,一种解决方案是将数据复制到std :: vector中,然后在std :: vector上执行std :: nth_element,然后使用std :: map :: find查找迭代器以找出要从哪里擦除。
另一个解决方案之一是仅遍历std :: map并维护计数器变量以删除元素的数量。这将给出O(n)。是否可能用STL算法替换for循环?
不应该只为了删除元素而进行数据副本。例如,一种解决方案是将数据复制到std :: vector中,然后在std :: vector上执行std :: nth_element,然后使用std :: map :: find查找迭代器以找出要从哪里擦除。
另一个解决方案之一是仅遍历std :: map并维护计数器变量以删除元素的数量。这将给出O(n)。是否可能用STL算法替换for循环?
std::map
没有提供一个O(log(n))的解决方案来访问第n个元素? - undefined