如何解决如何使用集合中的元素键擦除地图中的元素?
| 我有一组存储要在地图中删除的键。 我尝试了代码打击,但是没有编译。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(),std::bind(assoc_erase(),&mymap,_1));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。