「覚え間違い」を教えてください!

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

A 回答 (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));

この回答への補足

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

補足日時:2009/01/06 07:20
    • good
    • 0

>以下のような場合でも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));
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/01/06 08:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A