为什么我在地图中搜索STL时差很大?

why I search in map stl time difference is a lot?

本文关键字:时差 STL 搜索 地图 为什么      更新时间:2023-10-16

当我使用std::map时,似乎根据所使用的方法访问元素需要不同的时间。

第一种方法:直接访问

cnt += umap[t];

第二种方法:

if (umap.find(t) != umap.end()){
cnt += umap[t];
}

第二种方法似乎比第一种方法快得多,我不明白为什么。有人可以解释这两种方法之间的区别吗?

每个代码片段都在做不同的事情。

第一个片段需要更多时间,因为它插入一个键tumap,如果它不存在(并用零初始化它(,然后再将其添加到cnt

在第二个代码段中,没有插入任何键。由于if条件,仅当t具有密钥时,才会将umap[t](然后调用(添加到cntumap

第二个代码段可以通过临时存储find返回的迭代器来更优化。在第二个代码段中,operator[]内部再次调用find方法,这反过来又增加了时间复杂度。

因此,像这样的尝试将证明要快得多(从user253751的评论中获取(:

if(auto it = umap.find(t); it != umap.end())
cnt += it->second;