c++ - 如何获取集合中某个位置的整数?

标签 c++ performance stl set binary-search-tree

给定一组整数,如果集合的元素以递增的方式排序,我如何知道哪个整数在某个位置?例如,给定一组整数,如何获得较小的整数或第二个较小的整数等

有没有可能在对数时间内做到这一点?我的意思是,我知道有很明显的方法可以满足我的要求,但有没有在对数时间内有效的方法?

最佳答案

std::set 的元素以递增顺序存储。

不,你不能在对数时间找到位置 N 的项目——它需要线性时间。

auto start = your_set.begin();
std::advance(start, N);

理论上,它可以通过让树的每个节点存储其左侧节点的计数(即按顺序在其前面)以对数时间完成,但是std: :set 不需要或提供(标准化的)接口(interface)来使用它,即使它存在也是如此。

关于c++ - 如何获取集合中某个位置的整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27453422/

相关文章:

javascript - document.addEventListener 减慢加载速度

mysql - 什么会导致 InnoDB 表的单个 UPDATE 性能非常低?

C++错误删除双端队列 vector 的元素

c++ - 如何在不复制数据的情况下在平面数组和多维数组之间进行转换?

c++ - 展开操作期间遇到无效或未对齐的堆栈

c++ - 是否可以使用 dynamic_cast 进行模板类型检查?

mysql join性能IF多个OR条件

c++ - 如何使用 "vector of vector"?

C++ stable_sort 不稳定?

C++加载外部类exe