我经常看到如下代码:
if(myQMap.contains("my key")){
myValue = myQMap["my key"];
}
Run Code Online (Sandbox Code Playgroud)
理论上它在QMap中执行两次查找.
我的第一反应是它应该由以下代替,它只执行一次查找,应该快两倍:
auto it = myQMap.find("my key");
if(it != myQMap.end()){
myValue = it.value();
}
Run Code Online (Sandbox Code Playgroud)
我想知道QMap是否会自动为我做这个优化?换句话说,我想知道QMap是否保存了找到的最后一个元素的位置QMap::contains()并在执行下一次查找之前先检查它?
我希望QMap提供两种功能,以便更好地与类接口.询问地图"包含"具有指定键的值是否比调用"查找"功能更自然.
如代码所示,find和contains调用以下内部函数: -
Node *n = d->findNode(akey);
Run Code Online (Sandbox Code Playgroud)
因此,如果您要使用返回的迭代器,那么使用find并检查返回值将更有效,但如果您只想知道映射中是否存在该值,则调用contains更易于提高可读性.
如果查看源代码,您会看到QMap是作为节点的二叉树结构实现的.调用findNode会遍历节点,并且不会缓存结果.
| 归档时间: |
|
| 查看次数: |
12199 次 |
| 最近记录: |