1. ホーム
  2. c++

[解決済み] 2つのSTLマップをマージするにはどうしたらいいですか?

2023-07-28 18:03:06

質問

2つのSTLマップを1つに統合するにはどうしたらよいでしょうか。2つとも同じキーと値の型を持っています ( map<string, string> ). キーが重複している場合は、どちらかのマップを優先したいと思います。

どのように解決するのですか?

の要素を保持するとして、そのために mapA の要素を保持し mapB にキーがないものは mapA :

mapA.insert(mapB.begin(), mapB.end())

は、あなたが望むことをやってくれると思います。

(編集: C++17以降を使用している場合は、この回答を検討してください。 https://stackoverflow.com/a/56594603/118150 )

作業例です。

#include <iostream>
#include <map>

void printIt(std::map<int,int> m) {
    for(std::map<int,int>::iterator it=m.begin();it!=m.end();++it)
        std::cout << it->first<<":"<<it->second<<" ";
    std::cout << "\n";
}

int main() {
    std::map<int,int> foo,bar;
    foo[1] = 11; foo[2] = 12; foo[3] = 13;
    bar[2] = 20; bar[3] = 30; bar[4] = 40;
    printIt(foo);
    printIt(bar);
    foo.insert(bar.begin(),bar.end());
    printIt(foo);
    return 0;
}

を出力します。

:!./insert
1:11 2:12 3:13
2:20 3:30 4:40
1:11 2:12 3:13 4:40