我有两个提升侵入式设置,我需要将它们合并在一起。我有map_old.m_old_attributes
提升侵入式设置,我需要将其合并到m_map_new_attributes
提升侵入式设置
void DataTest::merge_set(DataMap& map_old)
{
// merge map_old.m_old_attributes set into m_map_new_attributes
}
最好的方法是什么?我无法找到可以为我合并的功能?我最近开始使用boost入侵集,我无法找到可以进行合并的预定义方法,或者可能是我错了?
答案 0 :(得分:1)
确实,侵入式集合是一种不同的野兽。他们不管理他们的元素分配。
因此,在合并时,您需要确定的含义。我想说一个合理的解释是你希望将<{1}}容器中包含的元素移动到数据集中。
这会使map_old
为空。这是一个这样的算法:
map_old
更新或者,您可以使用稍微棘手的iterater-erase-loop(谨防迭代变异容器)来实现O(1)内存复杂性:Live On Coliru as well
template <typename Set> void merge_into(Set& s, Set& into) { std::vector<std::reference_wrapper<Element> > tmp(s.begin(), s.end()); s.clear(); // important! unlinks the existing hooks into.insert(tmp.begin(), tmp.end()); }
for (auto it = s.begin(); it != s.end();) {
auto& e = *it;
it = s.erase(it);
into.insert(e);
}
当然,你可以为合并操作提出不同的语义(更像是'copy'而不是'move')