在集合中查找第k个最大元素

时间:2014-10-22 22:35:54

标签: c++

我在C ++中使用set

set<int> Set;

我想要k-thest最大的元素。怎么做? 请给我一臂之力,

2 个答案:

答案 0 :(得分:1)

集合中的元素按排序顺序存储,因此Set.rbegin()会产生集合中最大元素的迭代器。

std::next将按指定的位数推进迭代器,并将迭代器返回到该位置。

你可以将这些组合起来得到最大项的迭代器,然后从那里向前推进K个元素以得到K th 最大元素的迭代器,然后取消引用以获取元素本身

答案 1 :(得分:1)

使用std :: set在O(log n)时间内无法做到这一点,但您可以使用扩展STL中的tree来完成此操作。以下是如何使用它:

#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> s;
s.insert(x);
s.erase(x);
s.count(x);
s.find_by_order(k);
// k-th biggest element in set
s.order_of_key(x);
// how many elements in set are less than x