【问题标题】:How can I update the value of QHash for a specific key?如何更新特定键的 QHash 值?
【发布时间】:2013-10-24 19:00:23
【问题描述】:

我在 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

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

【问题讨论】:

    标签: c++ qt qtcore qhash


    【解决方案1】:

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

    您可以执行以下操作:

    myhash[5] = 88;
    

    根据文档,如果键不存在,则构造并返回默认值。这意味着根据场景,您可能首先要考虑确保键确实存在(例如,如果您在 for/foreach 循环中遍历键并使用检索到的键来调用 [] 运算符,您将避免此问题)或检查检索到的值以及它是否为默认值。

    【讨论】:

    • 谢谢.. 我在文档中看到了这一点,但如果没有一个简单的例子,我不明白这意味着什么。我希望 Qt 文档有更多的例子。非常感谢!
    • @panofish,“可修改参考”一词可能暗示您可以更改值。
    • 我猜到了,但我的问题在于解释 T & QHash::operator[](const Key & key) AS myhash[5] = 88; ...当然现在事后看来,这似乎很容易:)
    【解决方案2】:

    来自文档:如果您使用 QHash 中已存在的键调用 insert(),则会删除先前的值。例如:

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

    Operator[] 在这种情况下也可以使用。但在其他一些情况下要注意。来自文档: 通常,我们建议您使用 contains() 和 value() 而不是运算符来查找哈希中的键。原因是如果不存在具有相同键的项目(除非散列是 const),则操作员会默默地将项目插入散列中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-01
      相关资源
      最近更新 更多