Оператор
set<Object>::iterator i = objectSet.end()--;
означает «назначить end () для i, а затем уменьшить временную переменную, которая должна быть выброшена».Другими словами, это то же самое, что и set<Object>::iterator i = objectSet.end();
, и я уверен, что вы понимаете, что не можете стереть end (), потому что он указывает на один конец.Вместо этого используйте что-то вроде этого:
assert(!objectSet.empty()); // check there is something before end
set<Object>::iterator i = objectSet.end();
--i;
objectSet.erase(i);
, и это нормально, это законный способ по существу воспроизвести .back()
для набора.
Кроме того, обратные итераторы имеют член base()
дляпреобразовать в обычный итератор, и я думаю, что вы можете удалить только обычные итераторы - попробуйте objectSet.erase(objectSet.rbegin().base())
.