У меня есть хэш-карта определяется какСТЛ hash_map - модифицирования ключ
class KeyType {
int key;
mutable bool flag;
KeyType(int key) : key(key), flag(false) {}
void setFlag() const { flag = true; }
};
struct KeyType_hasher {
size_t operator()(const KeyType& s) const {
return static_cast<size_t> key;
}
};
struct KeyType_equal {
size_t operator()(const KeyType& s1, const KeyType& s2) const {
return s1.key == s2.key;
}
};
typedef hash_map<KeyType , ValueType, KeyType_hasher, KeyType_equal > KeyValueMap;
Позже в коде у меня есть место, где я должен цикл, хотя на карте и применить функцию к каждому значению я нахожу. Основываясь на результатах функции, я также должен изменить ключ на итераторе.
KeyValueMap theMap;
// theMap[key1] = value1;
// theMap[key2] = value2;
// theMap[key3] = value3;
for(KeyValueMap::iterator i = theMap.begin(); i != theMap.end(); ++i) {
if(true == ValueFunction(i->second))
i->first.setFlag();
}
Вопрос в том, будет ли это правильным способом изменения ключа, если нужно? Имеет ли он какие-либо плохие побочные эффекты?
Почему вы хотите изменить ... ключ? Почему бы не сохранить флаг в части ценности!? –
@Matthieu M Может быть; но реализация, которую я должен был использовать, была немного причудливой для изменений в объекте ValueType. –
Ах да, мы не всегда можем выбрать:/ –