可能重复:
C++ STL set update is tedious: I can’t change an element in place
我很难过:
struct File {
struct Handle {
size_t count;
};
std::set<Handle>::iterator handle_;
~File() {
File::close(*this);
}
static void close(File &f) {
(*f.handle_).count--;
}
};
对于ICC,错误是:
error #137: expression must be a modifiable lvalue
(*f.handle_).count++;
^
为什么std :: set :: iterator const?
答案 0 :(得分:3)
std::set::iterator
是一个常量迭代器,因为修改集合中元素的值可能会使元素的总排序和唯一性无效。要修改元素,您需要将其复制出来,删除元素,修改副本,然后将其放回集合中。
Handle handle = *(f.handle_);
set.erase(f.handle_);
handle++;
set.insert(handle);
// or just set.insert(++handle) if you've overloaded prefix increment too