2017-01-21 7 views
-1

std::set<int> 및 다중 세트 클래스 std::multiset<int>을 사용하여 조합, 교차 등 일부 설정 작업을 수행하고 있습니다. 문제는 두 개의 다중 세트 사이에서 교차를 수행해야한다는 것입니다. 나는 또한 중복 된 값을 얻는다. 교차로는 간단한 세트 (다중 세트가 아닌)로 사용할 때 잘 작동합니다.C++을 사용하여 다중 교차를 수행하려고합니다

Set1과는 = {1,2,3,4,5,6}
은 Set2를이 = {4,5,6,7,8,9}
다음
표준 :과 set_intersection 나에게 올바른을 제공 나는 MULTISET

멀티 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,8,9,9}

그리고 다시 std :: set_intersection을 사용합니다. 나 결과에요 {4,5,6}

실제 교차 {4,4,5,5,6,6}

나는 여러 세트를 사용하고 있지만 있기 때문에, 정확하지

교차 결과를 유지하기 위해, 여전히 잘못된 대답을 얻습니다.

아무도 내가이 문제를 어떻게 해결할 수 있는지 말해 줄 수 있습니까?

+0

해결 방법으로 구현에서 벡터의 std :: set을 사용할 수 있도록 허용하고 set_intersection이 필요한 모든 요소를 ​​포함하는 벡터를 반환합니다. – 16tons

+0

그래서 각'{elememt, count}'에 대해 출력에있는 두 개의 다중 세트 사이의 계산을 원하십니까? – Yakk

+0

고마워, 모든 사람들이 벡터로 그 일을 할 수 있을지 모르겠지만 코드가있는 곳 어디에서도 찾을 수 있기 때문에 세트가있는 솔루션을 선호한다. 나는 나의 예에서 보여준 결과를 원한다. 중복되는 요소가 중복 된 것이 아니라 개별적인 번호로 간주되기를 바랍니다. @ 얍크 네가 방금 말한 것과 같은 것. –

답변

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