如何用 QHash 创建三维数组?
Posted
技术标签:
【中文标题】如何用 QHash 创建三维数组?【英文标题】:How to create three dimensional array with QHash? 【发布时间】:2014-03-03 20:08:48 【问题描述】:我想用三个参数创建 QHash:
QHash <int, QString, float> myhash;
我知道我必须使用嵌套的 QHash,所以我这样做了:
QHash <int, QHash<QString, float> > myhash;
但我不知道如何将值插入 myhash。 我尝试创建另一个 Qhash 并将其插入到我的 myhash 中,但我没有任何意义,因为我有一个密钥的确切 1 对数据。 我想要的基本上是:
0, "string1", 1.5
1, "string2", 1.2 etc.
我如何有效地创建上述数组(就查找时间而言(我使用 QHash 的原因))。以及之后如何插入值。
谢谢转发。
【问题讨论】:
你的问题是二维的,第三个值是二维表单元格中的值。 【参考方案1】:使用QHash <int, QHash<QString, float> > myhash;
,您可以简单地执行以下操作来设置值:
myhash[42]["fortytwo"] = 42.42;
您可以使用相同的语法来访问元素,但请注意,当使用非 const operator[]
访问时,这些条目实际上将在散列中创建。所以通常最好使用value()
method:
if (myhash.value(43).value("fortytwo") >= 42) /*...*/
注意对于QHash
和QMap
,访问不在map中的key是可以的,在这种情况下会返回default constructed值。上面首先表示空哈希,其次表示值0.0f
。
要将其与其他答案中使用 QPair
的方法进行比较,这具有特殊的优势,即您可以通过“行”轻松访问元素,如果这对您的用例很重要(只要确保您有嵌套的以正确的顺序散列)。此外,使用这种方法,您可以为不同的维度使用不同的容器,例如,如果您需要对一个维度进行排序,请使用 QMap
(按键排序),QHash
(更有效)用于不需要排序的维度。此外,您可以轻松拥有任意数量的维度,只需添加更多嵌套容器即可。
另一方面,如果键在逻辑上是一对从不分离的值,并且数据不是真的(从编程角度)组织为二维表,那么使用@ 987654336@ for key 可能更好。
与问题无关:为了提高效率,在 Qt 5 和 C++11 you could use QStringLiteral("fortytwo")
中已经在编译时创建了 QString
。
【讨论】:
非常感谢您的详细回答。现在我可以正确地选择对我有益的东西了。【参考方案2】:使用 QPair 作为密钥:
QHash<QPair<int,QString>,float> myhash;
插入值:
myhash.insert(QPair<int,QString>(1,"string1"),12.);
或
QPair<int,QString> p(1,"string1");
myhash[p] = 12.
【讨论】:
您好,感谢您的回答。你能告诉我如何在 myhash 中插入值吗? @user3185491:我添加了插入示例。以上是关于如何用 QHash 创建三维数组?的主要内容,如果未能解决你的问题,请参考以下文章