簡體   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