2014-09-13 2 views
-1

Я пишу программу, которая читает текстовый файл в форме ниже, импортирует данные в вектор, а затем выполняет некоторые вычисления с ним. На данный момент я могу импортировать свои данные попарно, вставлять их в вектор и сортировать вектор. Однако все мои усилия потерпели неудачу, когда дело дошло до фактического удаления дубликатов, чтобы я мог использовать вектор для других целей.Как удалить дубликаты из вектора?

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

В настоящее время это мой соответствующий код прямо сейчас. Если я делаю vec1.size() на векторе выше (только 6 строк), выход должен быть 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

Похоже, вы хотите использовать set вместо vector.

+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 не является функцией –