C++で二組と交差する標準的な方法は、次の操作を実行することです:インプレースC++設定交差点
std::set<int> set_1; // With some elements
std::set<int> set_2; // With some other elements
std::set<int> the_intersection; // Destination of intersect
std::set_intersection(set_1.begin(), set_1.end(), set_2.begin(), set_2.end(), std::inserter(the_intersection, the_intersection.end()));
はどのようにして、インプレース積集合をやって行くのでしょうか?つまり、set_1にset_intersectionの呼び出しの結果を持たせます。明らかに、私はちょうどset_1.swap(the_intersection)
を行うことができますが、これはインプレースを交差させるよりもはるかに効率が悪いです。
継続は冗長で、使用する唯一の比較演算子が以下のようになるように 'if(* it1 <* it2)else if(* it2 <* it1)else ... 'それが 'set'の仕組みです。 –
右! if-elseなので、私は次の条件文がチェックされると考えていました。ありがとう、私は答えを編集します。 – ChrisInEdmonton
'set_1.erase(it1 ++)'は、あなたのケースで有効であっても(ベクトルのような)いくつかのコンテナでは正しくありません。すべてのコンテナで有効な 'it1 = set_1.erase(it1)'を使うべきです。 –