我们知道map :: find返回一个迭代器,指向找到键位置的位置。此外,作为二进制搜索操作,复杂度为O(logn)。所以它似乎在内部维护了一个迭代器,并且会在成功时返回。 那么哪一个更有效的查找或迭代器,因为我认为两者都会在运行时提供相同的复杂性(我可能是不正确的)。 那么请你建议在哪里使用find以及在哪里使用迭代器。在其中一个实现中,我需要查看特定键的映射(因为它可以包含N个键,我们只对m键感兴趣)。所以find是否会更高效或迭代。 还有什么是处理查找失败案例的好方法,因为我不想在代码中添加太多if else案例会增加复杂性。
答案 0 :(得分:2)
我不完全确定你的意思,但使用std::map<...>::find()
比在地图的迭代器上使用std::lower_bound()
更有效:内部树上的二进制搜索只是导航树并且O(log(n))
n
1}} std::lower_bound()
是地图大小的表现。 operator++()
也会进行二分查找,但需要使用operator--()
和/或O(n)
来移动迭代器。因此,它将具有{{1}}性能。我认为它甚至不应该编译,但我不完全确定它是否不能编译。
答案 1 :(得分:1)
首先,他们做了两件不同的事情。其次,这取决于实施。
答案 2 :(得分:0)
根据经验:如果您可以选择通用算法(此处为std::find
)和同名的容器特定算法(此处为std::map<...>::find
),则使用容器特定算法。
如果没有比通用版本更高效的话,没有人会打扰实现容器特定的容器,这将是一段时间的浪费。