簡體   English   中英

檢查地圖中是否存在元素c ++

[英]Check if element exists in map c++

是否有任何函數可以查找映射中是否存在某個元素(而不是鍵)。 例如,我有一個地圖,想要查找單詞是否是地圖中任何一對中的第二個元素,如果是,則其鍵是什么。

映射是通過鍵進行組織的,因此缺少對每個元素進行迭代的方法。

假設您正在搜索look_for ,則可以使用標准庫的std::find_if

auto it = std::find_if(map.begin(),
                       map.end(),
                       [&look_for](const auto& kv_pair) {
                            return kv_pair.second == look_for;
                       });
if (it != map.end()) {
    auto key = it->first;
    // ...
} else {
    // Value not found
    // ...
}

也可以使用手動循環( std::find_if通常被認為是更好的方法,但是在這里可能會過分std::find_if

for (const auto& kv_pair : map)
    if (kv_pair.second == look_for)
        return kv_pair.first;
// If you reach this, the value isn't in your map

std::find_if與lambda一起使用:

map<int,int> m;
m[1] = 10;
m[2] = 20;
m[3] = 30;
auto target = 20;
auto f20 = std::find_if(std::begin(m), std::end(m), [&](const auto& p) {
    return p.second == target;
});
if (f20 != std::end(m)) {
    // We have our value
}

演示

請注意,與對數的鍵搜索不同,對值的搜索是線性的。

掃描原始鍵值字典需要O(n)時間,並且可能很慢。

為了快速找到特定值及其鍵,創建反向字典是一種方法。 對於原始的std::map作為鍵值,反向字典為std::unordered_multimap作為value-key。 查找時間為O(1)

暫無
暫無

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

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