【发布时间】:2014-12-01 02:35:48
【问题描述】:
假设我有两张地图
std::map<string,int> mapA;
mapA["cat"] = 1;
mapA["dog"] = 3;
那么另一张地图是mapB
std::map<string,int> mapB;
mapB["cat"] = 1;
mapB["horse"] = 3;
现在我需要将 mapB 合并到 mapA 所以合并后最终的mapA是这样的
mapA["cat"] = 2;
mapA["dog"] = 3;
mapA["horse"] = 3;
我想知道实现这一目标的最佳方法是什么? 我知道我可以遍历 MapB 并检查每个元素是否在 MapA 中,如果是则增加值,否则将其添加到 MapA。我的问题是是否有算法或更快更有效的方法?
【问题讨论】:
-
一种可能比直接方法更有效的算法可以尝试利用两个映射使用相同顺序的事实。不幸的是,接受提示的
map::insert不会返回是否可以找到该元素(如果找到了,您可以尝试使用前一个目标元素作为下一个目标元素的提示)。 -
最佳情况草图
O(N+M)算法:coliru.stacked-crooked.com/a/0932b4743edf9824 不过,我可能对提示/插入位置感到困惑。