2014-09-13 3 views
-1

아래 양식으로 텍스트 파일을 읽고 벡터로 데이터를 가져온 다음 그 데이터로 계산을 수행하는 프로그램을 작성 중입니다. 현재로서는 데이터를 쌍으로 가져 와서 벡터에 삽입하고 벡터를 정렬 할 수 있습니다.하지만 실제로 다른 복사본을 제거하는 데는 모든 노력이 실패했습니다. 따라서 다른 용도로 벡터를 사용할 수 있습니다.벡터에서 중복을 제거하는 방법은 무엇입니까?

1  4 
5  6 
4  5 
4  5 
5  4 
6  7 
... 

이것은 현재 현재 관련 코드입니다. 위의 벡터 (6 행만)에서 vec1.size()를 수행하면 출력은 5가되어야합니다. 그러나 모든 텍스트 파일을 시도하면 1이라는 결과가 표시됩니다. 이유는 알 수 없습니다.

while(getline(fs1, instrng)) { 

    istringstream s1(instrng); 
    int a, b; 
    s1 >> a >> b; 
    pair<int,int> pair1 = make_pair(a,b); 
    vec1.push_back(pair1); 

    sort(vec1.begin(), myvec1.end()); 
      auto last = std::unique(vec1.begin(), vec1.end()); 
      vec1.erase(last, vec1.end()); 
+3

['std :: unique'] (http://en.cppreference.com/w/cpp/algorithm/unique)를 사용하십시오. – juanchopanza

+1

@juanchopanza 당신은 대답으로 게시 했어야합니다 – Zaffy

+2

@ Zaffy 이미 많은 중복이 있기 때문에 제가하지 않았습니다. – juanchopanza

답변

2

vector 대신 set을 사용하려는 것으로 보입니다.

+1

정보를 알 수있는 정보가 충분하지 않습니다. – juanchopanza

+0

나는이 프로그램을 위해 벡터를 사용해야한다. 그렇지 않으면 나는 세트를 사용했을 것이고 또한 (1 5)와 (5 1) 같은 데이터 쌍을 다루고 그것을 하나로 계산할 필요가있다. – kal1nga

+1

@ kal1nga (1 5)를 (5 1)과 동일하게 취급하려면 두 값의 순서를 유지하는 새로운 데이터 유형 (예 : 커플)을 정의해야합니다. 벡터 대신 집합을 사용할 수없는 이유를 설명하면 유용 할 것입니다. 어쨌든 집합에서 벡터를 구성하는 것은 어렵지 않습니다. –

-1
std::map<int, pair<int, int>> filter; 
while(getline(fs1, instrng)) { 
    istringstream s1(instrng); 
    int a, b; 
    s1 >> a >> b; 
    pair<int,int> pair1 = make_pair(a,b); 

    int larger = (a>b?a:b); 
    int smaller = (a>b?b:a); 
    int key = larger*10000 + b; 
    filter[key] = pair1; 
} 

이 맵의 반복은 원하는 벡터를 추출 할 수 있도록해야한다. 더 많은 항목을 계획하는 경우 임의로 할당 된 10000을 더 큰 숫자로 변경하고자 할 수 있습니다. 이렇게하는 것이 더 튼튼해야합니다.

+0

여기에 질문을 다시 말하고 내 용도로지도 기능을 사용할 수 없습니다. 지금 당장 작동하게하려면 마지막 세 줄을 조작해야합니다. – kal1nga

+0

std :: map은 함수가 아닙니다. –

관련 문제