gpt4 book ai didi

c++ - QMap::contains() VS QMap::find()

转载 作者:可可西里 更新时间:2023-11-01 16:10:13 26 4
gpt4 key购买 nike

我经常看到这样的代码:

if(myQMap.contains("my key")){
myValue = myQMap["my key"];
}

理论上在 QMap 中执行两次查找。

我的第一 react 是它应该被下面的替换,它只执行一次查找并且应该快两倍:

auto it = myQMap.find("my key");
if(it != myQMap.end()){
myValue = it.value();
}

我想知道 QMap 是否会自动为我进行优化?换句话说,我想知道 QMap 是否保存了用 QMap::contains() 找到的最后一个元素的位置,并在执行下一次查找之前首先检查它?

最佳答案

我希望 QMap 提供这两个函数,以便更好地与类接口(interface)。询问映射是否“包含”具有指定键的值比调用“查找”函数更自然。

如代码所示,find 和 contains 都调用了以下内部函数:-

Node *n = d->findNode(akey);

因此,如果您打算使用返回的迭代器,那么使用 find 并检查返回值会更有效,但如果您只想知道该值是否存在于映射中,则调用 contains 可读性更好。

如果查看源代码,您会发现 QMap 是作为节点的二叉树结构实现的。调用 findNode 遍历节点并且不缓存结果。

关于c++ - QMap::contains() VS QMap::find(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19965264/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com