c 映射::查找或映射:: iterator,它是更有效的W.R.T复杂性
C++ map::find or map::iterator which is more efficient w.r.t complexity
正如我们知道的映射:: find返回的迭代器,指向位置查找钥匙的位置。同样,作为二进制搜索操作,复杂性为o(logn)。因此,它似乎在内部保持了迭代剂,这将是成功的回报。因此,哪个是更有效的发现或迭代器,因为我认为两者都会在运行时提供相同的复杂性(我可能是不正确的)。因此,您可以建议在哪里使用查找以及在哪里使用迭代器。就像在其中一个实现中一样,我需要查看特定键的地图(因为它可以包含我们只对m键感兴趣的n个键)。因此,找到是否会更有效或迭代器。另外,要处理失败案例的好方法,因为我不想在代码中提高复杂性的其他情况。
我不完全确定您的含义,但是使用std::map<...>::find()
比在Map的迭代器上使用std::lower_bound()
要高:内部树上的二进制搜索只是导航该树,并且具有O(log(n))
性能n
是地图的大小。std::lower_bound()
也将进行二进制搜索,但需要使用operator++()
和/或operator--()
来移动迭代器。因此,它将具有O(n)
性能。我认为它什至不应该编译,但我不完全确定它是否不编译。
首先,他们做两件不同的事情。其次,这取决于实现。
作为经验法则:如果您可以在通用算法(此处的std::find
)和相同名称的容器特定算法之间进行选择(此处的std::map<...>::find
),则使用特定于容器的算法。
如果没有比通用版本更有效的话,没有人会打扰实现容器的时间。
相关文章:
- 在C++中初始化向量映射的最有效方法
- 如何有效地计算将单位立方体映射到自身的反射和旋转?
- 当映射包含字符串向量作为值时,从值中获取键的有效方法
- 映射唯一值和重复值的有效方法.可以访问键或值的位置
- 在映射中插入更多元素后,指向 QMap 中元素的指针是否仍然有效?
- EIGEN地图类:将C阵列映射到VectorXD指针以有效的方式
- 有效地检查映射 c++ 中是否存在元素
- 有效的双向作用域枚举映射
- C++将一组整数变量映射到值的有效方法
- 双向映射是否有更有效的实现
- CV :: Split或eigen ::大步:这对于从OPENCV映射多通道矩阵更有效
- c 映射::查找或映射:: iterator,它是更有效的W.R.T复杂性
- 有效地遍历映射,同时插入其他线程
- 如何在 C 中有效地存储字符串的映射
- 计算一组关系的整数映射的更有效的算法
- 无法从指向多态类的指针映射获取有效的指针
- 希望有效地克服 Boost.Process 间共享内存中映射中键类型之间的不匹配
- 索引映射的有效算法
- 如何用树数据结构有效地实现无序映射
- 覆盖映射文件中间数据的有效方法