我在C ++中使用set
set<int> Set;
我想要k-thest最大的元素。怎么做? 请给我一臂之力,
答案 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