1. ホーム
  2. c++

[解決済み] std::setのユニオン操作 [重複]について

2022-02-14 15:58:25

質問

標準ライブラリには、このような関数はないのでしょうか?

set<T> set::union(set<T> other)

あるいは、こんなのも?

set<T> getUnion(set<T> a, set<T> b)

set_union は名前だけの正しい関数です。を操作することができます。 vector のような効率は悪いかもしれません。 set -のみの関数です。

I を追加していません。 アペンドは元のセットを破壊する . 私が欲しいのは 新しい のセットは、その結合を表します。

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

2つのイテレータを使用することができます。 std::set::insert というテンプレートがあります。

template <typename T>
std::set<T> getUnion(const std::set<T>& a, const std::set<T>& b)
{
  std::set<T> result = a;
  result.insert(b.begin(), b.end());
  return result;
}


備考 : どうせコピーが必要なのだから、パラメータを値で取ったらどうかという意見があったので、値で取ったパラメータを返すときに許されないRVOの禁止を避けるために、この実装を選びました。rvalueの引数をうまく扱うには、この関数のオーバーロードでrvalue reverencesを取り、moveのセマンティクスを活用することができます。