Учитывая, что переменная «x» не участвует в сравнении «меньше», в этом случае было бы безопасно сделать изменяемым «x», что позволит вам изменять его из набора. Тогда ваше определение класса станет:
class foo {
public:
int value;
mutable int x;
foo(const int & in_v) : value(in_v), x(0) { }
bool operator<(const foo & rhs) const {
return value < rhs.value;
}
};
И теперь вы можете использовать его в std :: set и изменять x так, как вам нравится. В этом случае бессмысленно хранить две копии структуры данных, как предлагал предыдущий автор.