如何访问和清除多集中的倒数第二个元素?

问题描述

我最近试图从多集容器中访问倒数第二个元素。在这里,我想首先从容器中打印出倒数第二个元素,然后从容器中删除它。这个过程一直持续到容器的大小达到1。

下面给出了我到目前为止用于该过程的方法-

int n;cin>>n;
multiset<int>st;
for(int i=0;i<n;++i)
{
    int x;cin>>x;st.insert(x);
}
while(st.size()!=1)
{
    auto it=st.rbegin();
    prev(it,1);
    cout<<*it<<" ";
    st.erase(*it);
} 

在这里,我对给定案例的预期结果是-

6
0 0 1 0 1 1

ans- 1 1 0 0 0

谢谢。

解决方法

找到问题的答案。在我使用多集的情况下,我不小心删除了(* it)的所有副本,所以我只需要先找到值然后从集中擦除即可。

st.erase(find(* it))