2017-01-21 4 views
-1

私はstd::set<int>と複数セットのクラスstd::multiset<int>を使用して、組合、交差などの設定操作を実行しています。問題は2つのマルチセット間の交差を実行する必要があることです。私は重複した値も得ています。交差点は、単純なセット(マルチセットではない)で使用するとうまく動作します。C++を使用して複数セットの交差を実行したい

セット1 = {1,2,3,4,5,6}
SET2 = {} -4,5,6,7,8,9-
次いで
のstd :: set_intersectionは私に正しいを与えます私はマルチセット

マルチSET1を持っている場合、しかし、{4,5,6}

ある結果{1,1,2,2,3,3,4,4,5,5,6 、6}
マルチセット2 {4,4,5,5,6,6,7,7,8,9,9}

と私は再びstd :: set_intersectionを使用しますIマルチセットを使用していたが、実際の交差点は{4,4,5,5,6,6}

あるため、正しくない結果、{4,5,6}

は私よ交差点の結果を保持するには、私は間違った答えを得る。

誰も私にこの問題を解決する方法を教えてもらえますか?

+0

回避策として、実装でベクトルのstd :: setを使用できるようにしてから、必要なすべての要素を含むベクトルをset_intersectionが返しますか? – 16tons

+0

それぞれの '{elememt、count}'に対して、出力の2つのマルチセット間のカウントを最小にしたいですか? – Yakk

+0

ありがとう、誰も私はベクトルでそれを行うことができるかもしれませんが、彼らは私のコードのいたるところにあるので、私はセットでソリューションを持っている場合、私は好む。私は私の例で示した結果にしたいだけです。私は、重複した要素を重複としてとらえたくないが、個々の番号を持つことを望んでいない。あなたがちょうど言ったような@ Yakkはい何か –

答えて

3

間違いがないかどうかを確認するコードを投稿してください。 私は以下のコードのような交差の例をコード化しています。

multiset<int> ms1; 
ms1.insert(1); 
ms1.insert(1); 
ms1.insert(1); 
ms1.insert(2); 
ms1.insert(3); 

multiset<int> ms2; 
ms2.insert(1); 
ms2.insert(1); 
ms2.insert(2); 
ms2.insert(2); 
ms2.insert(4); 

vector<int> v(10); 
set_intersection(ms1.begin(), ms1.end(), ms2.begin(), ms2.end(), v.begin()); 

結果は1,1,2です。これは正しいです!

+0

ms2に余分な「1」を追加し、あなたが得るものを見てください。 – NathanOliver

+0

@NathanOliver何も間違っていません。それでも正しい答え。ベクトルvのサイズを11に増やすことを忘れないでください:)よく、ベクトルのサイズはセットのサイズに従わなければなりません。私が提出した最初のものはバグだった。 – Laleh

+0

私の悪い。それを後方に持っていた – NathanOliver

関連する問題