C ++中有一个关联的容器,它实际上是一个集合(多集),可以在O(1)中给出其中元素的顺序。
这是我使用容器的方式:
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace std;
using namespace __gnu_pbds;
template <typename T>
using ordered_multiset = tree<T, null_type, less_equal<T>, rb_tree_tag,
tree_order_statistics_node_update>;
问题是,我无法从其中删除一个元素:
ordered_multiset<int> s;
s.insert(0);
s.erase(0);
cout << s.order_of_key(1); // returns number of elements less than x
// Outputs: 1
奇怪的是,如果将less_equal
替换为less
,那么您将能够毫无问题地完成工作,实际上,如果您将容器用作多集,则将无法擦除元素,但是当您将其作为一组使用时没有问题。