Как я могу обновить значение QHash для определенного ключа?

я использую QHash в C ++ для хранения простых пар ключей и значений. В моем случае ключ является целым числом, так же как и значение. Чтобы добавить новую пару ключ / значение в хеш, это мой синтаксис:

QHash<int, int> myhash;
int key = 5;
int value = 87;

myhash.insert(key,value);

qDebug() << "key 5 value = " << myhash.value(5);   // outputs 87

Как я могу обновить существующее значение ключа? Какой синтаксис?

4

Решение

T & QHash :: operator [] (const Key & ключ)
Возвращает значение, связанное с ключом, в качестве изменяемой ссылки.

Вы можете сделать следующее:

myhash[5] = 88;

Согласно документации, если ключ отсутствует, создается значение по умолчанию и возвращается. Это означает, что в зависимости от сценария вы можете сначала рассмотреть вопрос о том, что ключ действительно присутствует (например, если вы перебираете ключи в цикле for / foreach и используете полученный ключ для вызова [] оператор, вы избежите этой проблемы) или проверьте полученное значение и является ли оно значением по умолчанию или нет.

8

Другие решения

Из документов: Если вы вызываете insert () с ключом, который уже существует в QHash, предыдущее значение стирается. Например:

hash.insert("plenty", 100);
hash.insert("plenty", 2000);
// hash.value("plenty") == 2000

Оператор [] тоже работает в этом случае. Но будьте внимательны в некоторых других случаях. Из документов:
В общем, мы рекомендуем использовать для поиска ключа в хеш-функции, а не в качестве оператора (), и в значении (), а не в качестве оператора. Причина в том, что оператор молча вставляет элемент в хеш, если не существует элемента с таким же ключом (если только хеш не является постоянным).

2

По вопросам рекламы [email protected]