- ベストアンサー
std::vectorのマージ
std::vectorで値が重複しないマージを行う一般的な方法はありますか? A = { 1, 2, 3, 4, 5 } B = { 4, 5, 6, 7, 8 } A + B = { 1, 2, 3, 4, 5, 6, 7, 8 } こういう感じにしたいのです。 今はforで回しているのですが、もっといい方法があるのではないかと思って。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>A + B = { 1, 2, 3, 4, 5, 6, 7, 8 } >こういう感じにしたいのです。 std::set_union(A.begin(), A.end(), B.begin(), B.end(), back_inserter(C));
その他の回答 (1)
- koko_u_u
- ベストアンサー率18% (216/1139)
回答No.2
>以下のような場合でもC [8](1,2,3,4,5,6,7,8)という結果を得る方法はありますか? last = std::unique(A.begin(), A.end()); std::set_union(A.begin(), last, B.begin(), B.end(), back_inserter(C));
質問者
お礼
どうもありがとうございます。
補足
#include <algorithm> #include <vector> int main() { std::vector<int> A, B, C; size_t nMax = 6; for(size_t n = 1; n < nMax; n++) { A.push_back(n); B.push_back(n + 3); } std::set_union(A.begin(), A.end(), B.begin(), B.end(), back_inserter(C)); return 0; } A [5](1,2,3,4,5) B [5](4,5,6,7,8) C [8](1,2,3,4,5,6,7,8) うまくいきました。ありがとうございます。 ところで、以下のような場合でもC [8](1,2,3,4,5,6,7,8)という結果を得る方法はありますか? #include <algorithm> #include <vector> int main() { std::vector<int> A, B, C; size_t nMax = 6; for(size_t n = 1; n < nMax; n++) { A.push_back(n); A.push_back(n); B.push_back(n + 3); } std::set_union(A.begin(), A.end(), B.begin(), B.end(), back_inserter(C)); return 0; } A [10](1,1,2,2,3,3,4,4,5,5) B [5](4,5,6,7,8) C [13](1,1,2,2,3,3,4,4,5,5,6,7,8)