簡體   English   中英

在地圖c ++中有效地檢查元素

[英]Efficiently check element exists in map c++

我知道.find()方法來檢查地圖中是否存在元素。 但假設我有一個map - map - 大約有2000個元素,我想在列表中添加一個元素。 我首先要檢查元素是否存在。 使用.find()是不是有點低效,因為迭代器必須“迭代”地圖中的元素? 是否有更高效,更省時的方法來檢查地圖中是否存在元素?

std::map具有對數查找復雜性,因此您不必訪問所有元素來確定元素是否在地圖中。

另一方面,您可以使用std::map::emplacestd::map::insert使查找和插入操作更簡潔:

auto [iter, ok] = the_map.emplace(the_key, a_value);
if (ok) {
  // element was not in map so got inserted
}

這假定a_value已經存在,或者構造它不是問題,即使它最終沒有插入到地圖中。

如果你真的需要使用'find and insert'idiom(這可能是因為你無法在任何情況下兩次為同一個鍵構造一個值對象)並且你擔心兩次對數復雜性,你必須使用std::map::equal_range

執行此操作的方法是首先使用equal_range和您的密鑰,然后使用返回的迭代器之一作為插入提示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM