为什么我在地图中搜索STL时差很大?
why I search in map stl time difference is a lot?
当我使用std::map
时,似乎根据所使用的方法访问元素需要不同的时间。
第一种方法:直接访问
cnt += umap[t];
第二种方法:
if (umap.find(t) != umap.end()){
cnt += umap[t];
}
第二种方法似乎比第一种方法快得多,我不明白为什么。有人可以解释这两种方法之间的区别吗?
每个代码片段都在做不同的事情。
第一个片段需要更多时间,因为它插入一个键t
umap
,如果它不存在(并用零初始化它(,然后再将其添加到cnt
。
在第二个代码段中,没有插入任何键。由于if
条件,仅当t
具有密钥时,才会将umap[t]
(然后调用(添加到cnt
umap
。
第二个代码段可以通过临时存储find
返回的迭代器来更优化。在第二个代码段中,operator[]
内部再次调用find
方法,这反过来又增加了时间复杂度。
因此,像这样的尝试将证明要快得多(从user253751的评论中获取(:
if(auto it = umap.find(t); it != umap.end())
cnt += it->second;
相关文章:
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 在C应用程序中运行C++(带有STL)函数
- 使用2个键的cpp-stl::优先级队列排序不正确
- 在STL容器中使用模板类
- 用C++中的CPerson(类)类型的对象初始化STL矢量
- 将stl字符串缩小到小于15个字符的容量
- 在为LINUX创建共享库时,如何避免STL的私有/弱副本
- 检查函数返回类型是否与STL容器类型值相同
- STL算法函数在多个一维容器上的使用
- 在STL - C++中按成绩对学生列表进行排序?
- 为什么 STL 容器适配器堆栈中的 top 返回常量引用?
- λ可以适应STL吗?
- 为什么使用 NDK 不能存在不同的 stl 实现?
- 如果我真的真的想从 STL 容器继承,并且我继承构造函数并删除新运算符,会发生什么?
- 使用 char 分隔符解析C++中的字符串,但将可重复的字符保留为每个解析的子字符串 (C++ STL) 中的分隔符
- 在C++中迭代 STL 集时出现奇怪的问题<CStudent>
- 如何在 C++17 STL 并行算法中处理调度?
- 在学习数据结构之前对STL有一个了解是好的吗?
- 为什么我在地图中搜索STL时差很大?