所以我们得到一组新的字符串,我们有一个作为映射键。我们想要one way
set_difference(注意 - 不是set_symmetric_difference)。所以目前我有如下丑陋的代码:
std::map<std::string, boost::shared_ptr<some_class> > _ds;
std::set<std::string> compare_and_clean(std::set<std::string> &new_)
{
std::set<std::string> result;
std::set<std::string> old;
for (std::map<std::string, std::string>::iterator mi = _ds.begin(); mi != _ds.end(); ++mi)
old.insert(mi->first);
std::set_difference( old.begin(), old.end(), new_.begin(), new_.end(), inserter(result, result.begin()));
for (std::set<std::string>::iterator i = result.begin(); i != result.end(); ++i) {
_ds.erase(*i);
}
return result;
}
我想知道如何在地图键上设置set_difference并以更干净的方式设置?
答案 0 :(得分:2)
是:您可以使用转换迭代器迭代std::map
的键。
你可以在an answer I provided to another question中找到这种转换迭代器的两个实现(一个使用Boost,另一个是独立的)。