C++ 如何得到哪个整数在集合中的某个位置?

C++ 如何得到哪个整数在集合中的某个位置?,c++,performance,stl,set,binary-search-tree,C++,Performance,Stl,Set,Binary Search Tree,给定一组整数,如果集合中的元素按递增顺序排列,如何知道哪个整数位于某个位置?例如,给定一组整数,如何获得较小的整数或第二个较小的整数等 有可能在对数时间内做到这一点吗?我的意思是,我知道有一些明显的方法可以实现我的要求,但是有没有在对数时间内有效的方法?std::set的元素是按递增顺序存储的 不,您无法在对数时间内找到位置N处的项--它需要线性时间 auto start = your_set.begin(); std::advance(start, N); 理论上,它可以在对数时间内完成,方

给定一组整数,如果集合中的元素按递增顺序排列,如何知道哪个整数位于某个位置?例如,给定一组整数,如何获得较小的整数或第二个较小的整数等


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

std::set的元素是按递增顺序存储的

不,您无法在对数时间内找到位置N处的项--它需要线性时间

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

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

标准::集的元素按递增顺序存储

不,您无法在对数时间内找到位置N处的项--它需要线性时间

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

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

标准::集的元素按递增顺序存储

不,您无法在对数时间内找到位置N处的项--它需要线性时间

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

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

标准::集的元素按递增顺序存储

不,您无法在对数时间内找到位置N处的项--它需要线性时间

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

理论上,它可以在对数时间内完成,方法是让树的每个节点在其左侧存储一个节点计数(即,按顺序排列在它之前),但
std::set
不要求这样做,也不提供(标准化)接口来使用它,即使它存在。

是的,如果元素被排序(“按递增方式排序”),然后有一种方法可以在对数时间内搜索任意整数。使用二进制搜索树。显然,如果您希望获得最佳的时间跨度,您将希望使用自平衡树(如红黑树、avl树等)。我相信C++选项是 STD::SET: 但是,我不太确定“获取较小的整数”是什么意思。如果您的意思是,给定一组整数,找到最小元素,那么您将需要查找堆。堆比树做得更好,因为在堆的情况下,查询最小值将在固定时间内发生,而插入和删除则在对数时间内发生。我相信C++的选项是 STD::PrimyIyQueQue的一部分。
或者,如果您想以最快的方式搜索整数,可以使用哈希表,因为它们允许在预期的固定时间内进行查询,并插入固定时间。C++的选项是<代码> STD::unOrdEdEdSt< <代码>。 是的,如果元素被排序(“以递增方式排序”),那么有一种方法可以在对数时间内搜索任意整数。使用二进制搜索树。显然,如果您希望获得最佳的时间跨度,您将希望使用自平衡树(如红黑树、avl树等)。我相信C++选项是 STD::SET: 但是,我不太确定“获取较小的整数”是什么意思。如果您的意思是,给定一组整数,找到最小元素,那么您将需要查找堆。堆比树做得更好,因为在堆的情况下,查询最小值将在固定时间内发生,而插入和删除则在对数时间内发生。我相信C++的选项是 STD::PrimyIyQueQue的一部分。
或者,如果您想以最快的方式搜索整数,可以使用哈希表,因为它们允许在预期的固定时间内进行查询,并插入固定时间。C++的选项是<代码> STD::unOrdEdEdSt< <代码>。 是的,如果元素被排序(“以递增方式排序”),那么有一种方法可以在对数时间内搜索任意整数。使用二进制搜索树。显然,如果您希望获得最佳的时间跨度,您将希望使用自平衡树(如红黑树、avl树等)。我相信C++选项是 STD::SET: 但是,我不太确定“获取较小的整数”是什么意思。如果您的意思是,给定一组整数,找到最小元素,那么您将需要查找堆。堆比树做得更好,因为在堆的情况下,查询最小值将在固定时间内发生,而插入和删除则在对数时间内发生。我相信C++的选项是 STD::PrimyIyQueQue的一部分。
或者,如果您想以最快的方式搜索整数,可以使用哈希表,因为它们允许在预期的固定时间内进行查询,并插入固定时间。C++的选项是<代码> STD::unOrdEdEdSt< <代码>。 是的,如果元素被排序(“以递增方式排序”),那么有一种方法可以在对数时间内搜索任意整数。使用二进制搜索树。显然,如果您希望获得最佳的时间跨度,您将希望使用自平衡树(如红黑树、avl树等)。我相信C++选项是 STD::SET: 然而,我不太清楚你的意思