如何更新特定键的QHash值?

7

我在C++中使用 QHash 来存储一些简单的键值对。在我的情况下,键和值都是整数。要向哈希表中添加一个新的键/值对,这是我的语法:

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

myhash.insert(key,value);

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

如何更新现有的键值对?语法是什么?

2个回答

10

T & QHash::operator[](const Key & key) 以可修改的引用形式返回与键相关联的值。

您可以执行以下操作:

myhash[5] = 88;

根据文档,如果键不存在,则会构造并返回默认值。这意味着,根据情况,您可能需要先确保键实际存在(例如,如果您正在通过for / foreach循环迭代键并使用检索到的键调用[]运算符,则可以避免此问题),或者检查检索到的值及其是否为默认值。

谢谢。我在文档中看到了这个,但是没有一个简单的例子,我不明白它的含义。我希望Qt文档有更多的例子。非常感谢! - panofish
@panofish,“modifiable reference”这个术语可能暗示您可以更改值。 - vahancho
我猜到了,但我的问题在于将T和QHash::operator[](const Key & key)解释为myhash[5] = 88; ... 当然现在回想起来,似乎很容易理解 :) - panofish

3

根据文档:如果您使用已经存在于QHash中的键调用insert()函数,则会擦除先前的值。例如:

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

在这种情况下,Operator[]同样适用。但是要注意其他情况。从文档中可以看到: 一般来说,我们建议使用contains()和value()而不是operator来查找哈希表中的键。原因是如果不存在相同的键,则operator会在哈希表中默默地插入一个项(除非哈希表是const)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接