繁体   English   中英

C ++ map :: find或map :: iterator更有效的复杂性

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

众所周知,map :: find返回一个迭代器,该迭代器指向找到键位置的位置。 同样,作为二进制搜索操作,复杂度是O(logn)。 因此,它似乎在内部维护一个迭代器,并且将在成功后返回。 因此,我认为哪一个是效率更高的查找或迭代器,我认为两者都会在运行时提供相同的复杂度(我可能是错误的)。 因此,您可以建议在哪里使用find以及在哪里使用迭代器。 在一种实现中,我需要查看特定键的映射(因为它可以包含N个键,我们仅对m个键感兴趣)。 因此,查找将是更有效的还是迭代器。 还有什么是处理查找失败案例的好方法,因为我不想在代码中添加过多案例,否则会增加复杂性。

我不确定您的意思,但使用std::map<...>::find()效率要比在地图的迭代器上使用std::lower_bound()效率更高:内部树上的二进制搜索只是导航树并具有O(log(n))性能,其中n为地图的大小。 std::lower_bound()也会进行二进制搜索,但是它需要使用operator++()和/或operator--()来移动迭代器。 因此,它将具有O(n)性能。 我认为它甚至不应该编译,但我不确定它是否不编译。

首先,他们做两件事。 其次,这取决于实施方式。

根据经验:如果可以在通用算法(此处为std::find )和同名容器特定算法(在此处为std::map<...>::find )之间进行选择,请使用该容器具体的。

如果没有比通用版本更有效的容器,没有人会实施特定于容器的代码,那将是浪费时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM