はClass1のために、オペレータがclass1a、class1b2つのベクトルから共通エンティティを削除しますか?
答えて
stl algorithmsは、特に何が必要である、set symmetric differenceを計算し、セット操作を実行するためにいくつかの機能を提供します。
は、ここで使用例は次のとおり
#include <algorithm>
#include <vector>
int main(int argc, char **argv) {
std::vector<int> v1;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
v1.push_back(5);
v1.push_back(6);
std::vector<int> v2;
v2.push_back(2);
v2.push_back(4);
v2.push_back(6);
v2.push_back(8);
// Ranges must be sorted!
std::sort(v1.begin(), v1.end());
std::sort(v2.begin(), v2.end());
std::vector<int> res; // Will contain the symmetric difference
std::set_symmetric_difference(v1.begin(), v1.end(),
v2.begin(), v2.end(),
std::back_inserter(res));
// Copy result to the output
std::copy(res.begin(), res.end(), std::ostream_iterator<int>(cout, " "));
// Prints "1 3 5"
return 0;
}
std::set_symmetric_difference
は、2つの範囲をとる(すなわち、2 OutputIteratorsの対)と、それが結果を置くInputIterator。また、結果範囲の最後にイテレータを返します。
EDIT
私はちょうどあなたの質問にご意見をお読みください。あなたは元の2つのベクトルを修正したい場合は、std::set_difference
を使用することができます。ここでは
vector<int>::iterator endRange;
endRange = set_difference(v1.begin(), v1.end(),
v2.begin(), v2.end(),
v1.begin());
v1.erase(endRange, v1.end());
は、我々は差集合V1の結果を置く - v2はv1のに。しかし、v1が変更されて以来、私たちはその逆を行うことはできません。ソリューションは、v1とv2の交点を計算し、この交差点との違いです:
vector<int> inter;
set_intersection(v1.begin(), v1.end(),
v2.begin(), v2.end(),
back_inserter(inter));
// inter is "2 4 6"
v1.erase(set_difference(v1.begin(), v1.end(),
inter.begin(), inter.end(),
v1.begin())
v1.end());
// v1 is "1 3 5"
v2.erase(set_difference(v2.begin(), v2.end(),
inter.begin(), inter.end(),
v2.begin())
v2.end());
// v2 is "8"
私がはるかにパフォーマンスのソリューションがありますが、この1つは明確で、かつ実際に広く使用することによって、あなたの意図を伝えると思います既知のstlアルゴリズム。
ソート2つのベクトルオブジェクト、そして一般的なマージ操作を行う並列に歩く==私が定義されているどのようにそれらの両方 から共通のエンティティを削除するvector<class1a>,vector<class1b>
を持っていると言います。それはどの項目が同一であるかを教えてくれます。
単純な方法は、最初のベクトルの各要素を2番目の配列の各要素と比較し、3番目のベクトルに任意の一致を追加することです。 n^2反復を終えると、3番目のベクトルを歩き、最初の2つからそれらのオブジェクトを削除します。
最適な解決策ではありませんが、ベクトルの大きさに応じて最も簡単な方法です。
class1a
とclass1b
のアイテムの各ペアについて、それらが等しくない場合は出力セットに追加します。それ以外の場合は、そのようなインスタンスを1つだけ追加します。配列の長さの最小値を繰り返します。 1つが長い場合は、もう少し残っています - これらをすべてセットに追加しようとします。
Setにvectorの値を追加し始めます。 class1とclass2のequalsメソッドをオーバーライドして、オブジェクトをどのように等しくするかを決めます。 equalsをデフォルトでオーバーライドしないと、==が比較に使用され、オブジェクトは異なるクラス==であるため、常にfalseが返されます。したがって、equalsメソッドをオーバーライドする必要があります。
stlヘッダーアルゴリズムでは、 "set_symmetric_difference"という関数があります。この関数は、1つの要素のすべてを入れますが、両方のソース範囲を1つの宛先範囲に入れません。
両方の範囲がソートされなければならないことに注意してください。
- 1. エリクサーは2つのリストから共通の要素を削除します
- 2. Pythonの2つのリストから共通の値を削除する
- 3. 2つの配列リストから共通の値を削除する方法
- 4. 最初のベクトルの要素に基づいて2つのstd ::ベクトルから要素を削除します
- 5. 2つのエンティティをマージし、LINQでヌル値を削除しますか?
- 6. ローカルコンテキストから重複したエンティティを削除/削除する
- 7. Lisp、2つの共通要素を持つサブリストを削除する
- 8. 参加する2つのテーブルから削除しますか?
- 9. Mongoid - M:Nコレクションからエンティティを削除しますが、削除しません。
- 10. Spring Boot 2つのエンティティから複数の行を削除するJHipster
- 11. Unixシェルスクリプト:変数から共通接頭辞を削除する
- 12. セグメンテーションフォールト:2次元ベクトルから要素をランダムに削除する
- 13. エンティティpojoからHibernateを削除しますか?
- 14. データベースからHTMLエンティティを削除する
- 15. JPA - @ManyToManyからエンティティを削除する
- 16. 2つのhtmlタグからコンテンツを削除します
- 17. JPA- ManyToManyリレーションセカンダリテーブルからすべてのエンティティを削除します
- 18. Java:ベクトルからのカスタムオブジェクトの削除
- 19. ベクトルから要素を削除してください。ベクトル
- 20. Numpy:2行に共通の行を削除する方法
- 21. 2つのエンティティからfetchedResultsController
- 22. dylibから依存共有ライブラリを削除しますか?
- 23. 共通コードから2つのiPhoneアプリケーションを構築する
- 24. clojure - refベクトルから要素を削除します
- 25. GetChanges()からエンティティを削除しています。Legalを挿入しますか?
- 26. Google App Engineのデータストアビューアから削除してエンティティを削除しても、エンティティはMemcacheから削除されません。
- 27. 通話機能エンティティを削除 - ファイル
- 28. OrientDBは2つの共通データベースを共有します
- 29. Pandasの2つのデータフレームで共通の行を削除するにはどうすればよいですか?
- 30. 2つのエンティティ間の関係を削除する方法
最終結果は何ですか?結合リストが必要ですか? –
いいえ1 – yesraaj
どういう意味ですか、1ですか? 1つのベクトルを結果にしますか?両方のベクトルを保持したいですか? –