Как обмануть компилятор для std :: set :: iterator?
У меня есть структура
struct _item {
int a;
int b;
bool operator <(const _item& x) const {return a<x.a;}
};
Я хочу изменить только элемент b (b не имеет значения для сортировки в наборе, сравнивается только элемент a).
std::set<_item> data;
std::set<_item>::iterator iter=data.begin();
iter->b=0; // error !!!
Авада Кедавра!
struct _item {
int a;
int b;
_item* self;
_item() {self=this;}
bool operator <(const _item& x) const {return a<x.a;}
};
iter->self->b=0; // Success !! Tested on VC10
Конечно, больше C ++ правильно
struct _item {
int a;
int b;
private:
_item* self;
public:
_item() {self=this;}
bool operator <(const _item& x) const {return a<x.a;}
int& bReference() const {return self->b;}
};
std::set<_item> items;
std::set<_item>::iterator iter=items.begin();
iter->bReference()=0; // Success !! Tested on VC1