这是我之前提出的问题 ( 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/