使用重叠的关键帧合并两个未定义的贴图
Merging two unordered_maps with overlapping keys
我想合并两个std::unordered_map
:mapA
和mapB
,同时如果两个映射都包含相同的键,则保留来自mapA
的项的优先级。
有没有一种优雅的方法可以做到这一点(而不是验证每个键……我的映射包含大量元素)?
示例:
mapA = {{"sugar",0.1},{"salt",0.2}}
mapB = {{"sugar",0.3},{"pepper",0.4}}
我想要的结果是:
result = {{"sugar",0.1},{"salt",0.2},{"pepper",0.4}}
忽略mapB
中的键值{"sugar",0.3}
谢谢。
绝对:
auto result = mapA;
result.insert(mapB.begin(), mapB.end());
如果密钥已经存在于容器中,则unordered_map
的insert
成员函数不执行任何操作。
演示。
我知道这个问题被标记为C++11,但为了完整性,如果您不关心保持mapB的完整性,那么似乎值得一提的是,C++17添加了merge()
函数。merge()
将键不在mapA中的所有元素从mapB移动到mapA。如果键在mapA中,则该元素的mapA保持不变,而该元素保持在mapB中。
https://en.cppreference.com/w/cpp/container/unordered_map/merge
由于std::unordered_map
未排序,因此没有其他方法。您必须在mapB
中的每个元素上循环,并尝试将其插入mapA
中。mapA
中的现有元素将不会插入。
相关文章:
- 根据下面的作者,如果两个指针指向不同的数组,则比较的第一个版本将未定义
- 比较两个用户定义的类型向量
- 为什么转换涉及两个用户定义的转换功能/构造函数
- 如何将一个或多个(未定义的数字)参数传递给函数
- 两个未分类阵列之间的最小差异
- 尝试构建C DLIB示例无法与数百个未定义的参考错误链接
- 两个未初始化的实例之一
- 当两个用户定义的复制构造函数时,是否有任何方法可以执行复制构造函数
- 将 opencv 捆绑为静态库会提供数千个未定义的引用
- 这两个类型定义有什么区别?
- 为两个类定义重载的强制转换运算符,这两个类之间具有循环依赖关系
- 使用重叠的关键帧合并两个未定义的贴图
- Visual Studio使用链接器LNK2019获取两个未解析的外部
- C++Ubuntu.使用FFMPEG库编译的多个未定义引用
- 在同一声明性区域中定义的两个未命名的名称空间
- 从N个2D点返回点对,其中每两个点定义一条直线
- 我不能将两个用户定义的类声明变量设置为彼此相等?
- 在c++中对两个用户定义对象进行类型转换——可能
- 两个本地结构,每个都在单独的cpp文件中-未定义的行为
- 加入两个未签名的字符 + 马洛克u_chars