c++ - 从 STL 集中删除最大元素

标签 c++ stl set

这是我之前提出的问题 ( Complexity of STL max_element ) 的后续。

我基本上想从集合中弹出最大元素,但我遇到了问题。

我的代码大致如下:

set<Object> objectSet;

Object pop_max_element() {
    Object obj = *objectSet.rbegin();
    set<Object>::iterator i = objectSet.end()--; //this seems terrible
    objectSet.erase(i); //*** glibc detected *** free(): invalid pointer
    return obj;
}

早些时候我试过 objectSet.erase(objectSet.rbegin()); 但编译器提示没有匹配的函数(我猜它不喜欢 reverse_iterator)。我知道没有检查空集,但是当 objectSet.size() >> 0 时它失败了。

最佳答案

您已经很接近了,但是您尝试在迭代器分配中做的有点太多了。您正在将 post-decrement 运算符应用于 end 返回的任何内容。我不太确定那是做什么的,但几乎可以肯定这不是你想要的。将 end 的结果分配给 i然后 将其递减以获得集合的最后一个元素。

set<Object>::iterator i = objectSet.end();
--i;
Object obj = *i;
objectSet.erase(i);
return obj;

关于c++ - 从 STL 集中删除最大元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3338756/

相关文章:

c++ - 如何在 C++ 中为堆栈集声明 Iterator

c++ - 如何迭代 C++ 映射中的一组特定键?

batch-file - 如何在 set/p 命令后使用 echo 命令

python - 如果没有定义顺序,python 如何遍历一个集合?

c++ - 指向成员函数的指针与指向数据成员的指针有何不同?

c++ - 将Rust项目链接到与其他cmake项目链接的cmake项目

c++ - 我怎样才能生成一个 std::shared_ptr ,它在它的控制 block 中具有局部性,但是是另一个类的集合?

haskell - 为什么 IntSet 查找是 O(min(n,W)),而不是 O(1)?

c++ - Rcpp Armadillo "ReferenceInputParameter is not a template"

c++ - 最大长度的字符串前缀同构