1. ホーム
  2. c++

[解決済み] std::set の back_inserter?

2022-09-03 10:51:51

質問

これは簡単な質問だと思います。このようなことをしたいのですが。

std::set<int> s1, s2;
s1 = getAnExcitingSet();
std::transform(s1.begin(), s1.end(), std::back_inserter(s2), ExcitingUnaryFunctor());

もちろん std::back_inserter は動作しません。 push_back . std::inserter もイテレータが必要なんですか?私はまだ std::inserter を使ったことがないので、どうしたらいいのかわかりません。

どなたかお分かりになる方はいらっしゃいませんか?


もちろん、他の選択肢として、ベクターで s2 にベクトルを使用し、後でそれをソートすることです。そのほうがいいかもしれませんね。

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

set には push_back というのは、要素の位置は集合の比較対象によって決まるからです。使用する std::inserter と渡して .begin() :

std::set<int> s1, s2;
s1 = getAnExcitingSet();
transform(s1.begin(), s1.end(), 
          std::inserter(s2, s2.begin()), ExcitingUnaryFunctor());

挿入イテレータは、次に s2.insert(s2.begin(), x) ここで x はイテレータに書き込む際に渡される値です。セットは、イテレータを挿入する場所のヒントとして使用します。同様に s2.end() .