Deep clone and recursive merge for owned trees
C++
#include <map>
#include <memory>
#include <string>
struct Node {
std::map<std::string, std::string> fields;
std::map<std::string, std::unique_ptr<Node>> children;
};
std::unique_ptr<Node> clone(const Node& n) {
auto out = std::make_unique<Node>();
out->fields = n.fields;
for (const auto& [k, c] : n.children) out->children[k] = clone(*c);
return out;
}
void merge(Node& base, const Node& over) {
for (const auto& [k, v] : over.fields) base.fields[k] = v;
for (const auto& [k, c] : over.children) {
if (Node* dst = base.children[k].get()) merge(*dst, *c);
else base.children[k] = clone(*c);
}
}