std::set
是一种有序树。它提供了 begin
和 end
方法,所以我可以获取最小值和最大值,并且提供了 lower_bound
和 upper_bound
用于二分搜索。但如果我想要获取指向中间元素的迭代器(如果有偶数个元素,则其中之一)怎么办?
有没有一种高效的方法(O(log(size))
而不是 O(size)
)来实现这个目标?
{1} => 1
{1,2} => 1 or 2
{1,2,3} => 2
{1,2,3,4} => 2 or 3 (but in the same direction from middle as for {1,2})
{1,312,10000,14000,152333} => 10000
提示: 同样的问题有俄语版本。
O(n)
,但我希望插入和查询都能以O(lb(n))
的速度工作。我知道使用隐式键的Decart树可以实现这一点,但我不想实现它,而是希望std::set
足够好以实现这一点。 - Qwertiystd::nth_element
和std::vector
。 - D Drmmr