c++ - 有没有办法使用 std::copy 复制不冲突的映射值?

标签 c++ stl stdmap

我正在寻找一种将值从一个 map 复制到另一个 map 的方法,类似于 this question ,但我不希望第二张 map 覆盖冲突的值,我希望原始值保持不变。

例如,如果我有两个 map {a: 1, b: 2},我将 {b: 3, c: 4} 复制到其中,第一张 map 将修改为 {a: 1, b: 2, c: 4}

有没有办法使用标准库函数来执行此操作,还是我需要通过迭代和检查冲突值手动执行此操作?

最佳答案

有一个版本的 map.insert 采用两个迭代器。如果项目(键)已经存在于目标映射中,则插入失败,因此这正是您想要的。

#include <iostream>
#include <map>

int main() { 
    std::map<char, int> stuff;

    stuff['a'] = 1;
    stuff['b'] = 2;

    std::map<char, int> stuff2;

    stuff2['b'] = 3;
    stuff2['c'] = 4;

    stuff.insert(stuff2.begin(), stuff2.end());

    for (auto i : stuff)
        std::cout << i.first << "\t" << i.second << "\n";
}

结果:

a       1
b       2
c       4

关于c++ - 有没有办法使用 std::copy 复制不冲突的映射值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17205486/

相关文章:

c++ - 如何使用 OpenMP 并行化此循环?

c++ - 在 tr1::shared_ptr 的 vector 中查找元素

c++ - 为什么 std::distance() for std:list<int>::iterator 在 last 在 first 之前不返回负数?

c++ - 为什么我可以将 boost map_list_of 传递给接受映射而不是构造函数的函数?

C++获取int中的每个数字

c++ - 在 Swift 中的 Objective-C++ 类中设置变量 --> 意外的 nil 崩溃

c++ - 如何在控制台上显示 map 的内容?

c++ - 如何在 C++11 中插入 std::map ?

c++ - Eclipse C++ : class, 命名空间,未找到枚举

c++ - 在find_if中使用正向和反向迭代器有什么区别