簡體   English   中英

如何使用集合中的元素鍵擦除 map 中的元素?

[英]How to erase elements in a map with the elements keys in a set?

我有一組將要刪除的密鑰存儲在 map 中。 我嘗試了代碼打擊,但它沒有編譯。

std::set<std::string> keys;
std::map<std::string, std::string> mymap;
....
for_each(keys.begin(), keys.end(), boost::bind(&std::map<std::string,   
                                               std::string>::erase, 
                                               &mymap, _1));

您不能獲取標准庫成員 function 的地址,因為未指定此類成員函數的聲明(允許實現添加額外的可選參數或向其他非重載的成員函數添加額外的重載,只要行為是相同的)。

做你想做的最簡單的方法是:

for (std::set<std::string>::iterator it(keys.begin()); it != keys.end(); ++it)
{
    mymap.erase(*it);
}

如果您有一個支持 lambda 表達式的編譯器,您還可以考慮:

std::for_each(keys.begin(), keys.end(), [&mymap](const std::string& key)
{
    mymap.erase(key);
});

如果出於某種原因你真的想使用bind ,你需要寫一個 function object 來調用erase

struct assoc_erase
{
    typedef void result_type;

    template <typename TContainer, typename TKey>
    void operator()(TContainer* container, const TKey& key)
    {
        container->erase(key);
    }
};

// Used as:
std::for_each(keys.begin(), keys.end(), std::bind(assoc_erase(), &mymap, _1));

暫無
暫無

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

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