У меня есть структура, которая хранит событие и флаг является оно последним или нет
struct Event{
string event;
bool ch;
};
Также есть класс, как некоторое хранилище
class Data{
public:
void Add(const int& a, Event& ev);
void Last(const int& a);
private:
map<int,set<Event>> m;
};
И функция добавления элемента с флагом, является он последним или нет
void Data::Add( const int& a,Event& ev){
if(m.count(a) > 0){
m[a].insert(ev);
for(auto& val:m[a]){
val.ch=false;
}
ev.ch=true;
}else{
m[a].insert(ev);
ev.ch=true;
}
}
Почему выдает ошибку при изменение параметра ch
в цикле for(auto& val:m[a])
?
Потому что map
и set
хранят свои элементы в отсортированном порядке, так что их нельзя менять произвольно (ключ в map
, элементы в set
) - иначе нарушится порядок, а потому они константны. Вы же пытаетесь изменить Event
в set
- вот компилятор и справедливо возмущен...
Можно выкрутиться, если у вас и правда ch
не принимает участия в сравнении и не могут быть два одинаковых события, но с разным ch
(словом, сравнение идет только по полю event
), объяснив это компилятору:
struct Event{
string event;
mutable bool ch;
bool operator < (const Event& e) const { return event < e.event; }
};
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Я совсем новичок в JS, помогите, пожалуйста, разобраться