c 映射::查找或映射:: iterator,它是更有效的W.R.T复杂性

C++ map::find or map::iterator which is more efficient w.r.t complexity

本文关键字:映射 有效 复杂性 查找 iterator      更新时间:2023-10-16

正如我们知道的映射:: 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),则使用特定于容器的算法。

如果没有比通用版本更有效的话,没有人会打扰实现容器的时间。