如何使用集合中的元素键擦除地图中的元素?

| 我有一组存储要在地图中删除的键。 我尝试了代码打击,但是没有编译。
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));
    
已邀请:
        您不能使用标准库成员函数的地址,因为未指定此类成员函数的声明(只要行为是相同)。 做您想做的最简单的方法是:
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
,则需要编写一个函数对象来调用
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));
    

要回复问题请先登录注册