无法从基于C ++ STL策略的数据结构中删除

问题描述 投票:0回答:1

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,那么您将能够毫无问题地完成工作,实际上,如果您将容器用作多集,则将无法擦除元素,但是当您将其作为一组使用时没有问题。

  • 导致问题的原因是什么?
  • 我该如何解决问题?
c++ stl containers
1个回答
0
投票

导致问题的原因是什么?

您尚未向Compare提供tree。您的程序格式错误。

我该如何解决问题?

使用std::multiset<T>

© www.soinside.com 2019 - 2024. All rights reserved.