• ベストアンサー

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で回しているのですが、もっといい方法があるのではないかと思って。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • koko_u_u
  • ベストアンサー率18% (216/1139)
回答No.1

>A + B = { 1, 2, 3, 4, 5, 6, 7, 8 } >こういう感じにしたいのです。 std::set_union(A.begin(), A.end(), B.begin(), B.end(), back_inserter(C));

kouichi_jp
質問者

補足

#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)

その他の回答 (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));

kouichi_jp
質問者

お礼

どうもありがとうございます。

関連するQ&A