2012-10-20 2 views
2

숫자가 포함 된 벡터 A가 있습니다. 1,7,9,9,3,13,3 숫자 B가 9,11,7,7,3,2가 들어 있습니다. , 1두 벡터 합집합

아래 두 벡터의 모든 요소를 ​​포함하는 벡터 C를 가져와야합니다. 예를 들어 벡터 A의 숫자 9는 반복해서는 안됩니다. 그래서 C는 1,7,9, 3,13,11,2

이 코드는 두 벡터의 조합이 될 것입니다하지만 반복되는 몇 가지 숫자가있을 것 벡터 C를 만들 것입니다

을 (하나의 벡터가 다음 배 번호 1을 포함하는 경우 C는 배 번호 1 포함)
vector<int>union(vector<int>A,vector<int>B) 
{ 
    sort(A.begin(),A.end()); 
    sort(B.begin(),B.end()); 
    vector<int> C(A.size()*2);   //vector A has same size as vector B 

    vector<int>::iterator it= set_union(A.begin(),A.end(),B.begin(),B.end(),C.begin()); 
    C.resize(it-C.begin()); 
    return C; 
} 

최대한 빨리 작동해야합니다. 이렇게하는 가장 좋은 방법은 무엇입니까?

+5

왜 C를 std :: set 및 covert를 vector로 사용하지 마십시오. – MarsRover

+0

@MarsRover 당신의 절대적으로 맞습니다. 세트는 수학적으로 그리고 프로그램 적으로 주어진 요구 사항에 적합한 선택입니다 – Paranaix

+0

큰 벡터 크기는 매우 느립니다 : (나는 더 빨리 작동시킬 필요가 있습니다. – Serillan

답변

1

이 문제의 올바른 해결 방법은 각 벡터를 먼저 정렬 한 다음 sink 정렬과 유사한 방식으로 교차/합집합/필터링을 가져 오는 것입니다.

+1

: std :: set은 버블이나 싱크 정렬 – nurettin