[英]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.