std :: map得到最低的n个元素时间

时间:2013-01-21 14:52:20

标签: c++ map stl binary-tree

当我在文档中阅读时,

std::map应该使用二叉搜索树来实现,它也会对它们进行排序。

我需要快速插入并快速检索元素。我还需要不时获得第一个最低N元素。

我在考虑使用std::map,这是一个不错的选择吗?如果是,我需要什么时间来检索最低的N个元素?为O(n * logn)时间?

4 个答案:

答案 0 :(得分:2)

您可以使用迭代器快速读取最低N个元素。从begin()到第N-1个元素将花费O(n)时间(获得下一个元素是std::map的摊销常数时间。)

但是,我注意到,使用带有二进制斩波搜索方法的排序std::vector实际上通常会更快,这取决于您的确切要求,这可能是值得的调查。

答案 1 :(得分:2)

C ++标准要求所有必需的迭代器操作(包括迭代器增量)都是分摊的常量时间。因此,获取容器中的前N个项目必须按O(N)时间摊销。

答案 2 :(得分:2)

鉴于你需要检索和n最小,我会说std::map是合理的选择。但取决于具有排序的确切访问模式std::vector也可能是一个不错的选择。

我不确定你的意思是检索。读 k 元素的时间是O( k )(假设您使用迭代器按顺序执行),删除它们的时间是O( k log n )( n 是元素的总量;即使使用迭代器按顺序执行也是如此。)

答案 3 :(得分:1)

我会对这两个问题说“是”。