2013-11-13 6 views
1

Я пытаюсь добавить объекты с помощью класса (Sample), сортировать свой вектор и после этого удалять дубликаты записей в моем векторе.удалить запись дубликатов в векторах

моих коды (это только часть моих кодов в моей программе)

vector<Sample> sampleVector; 
sort(sampleVector.begin(), sampleVector.end()); 
sampleVector.erase(std::unique(sampleVector.begin(),sampleVector.end(),sampleVector.end())); 

, но тем не менее он, когда я попытался запустить свою программу он показывает эту ошибку.

Type 'std::__1::__wrap_iter<Sample *>' does not provide a call operator 

, и я понял, что, скорее всего, ошибка вызвана этой линии

sampleVector.erase(std::unique(sampleVector.begin(),sampleVector.end(),sampleVector.end())); 

Что я должен сделать так, что я могу заставить его работать, чтобы удалить повторяющиеся записи в моем векторе? Заранее спасибо

Еще одна вещь, которую я пробовал, но она не работает.

bool myfunction (Sample *i,Sample *j) { 
    return (i==j); 
} 

std::vector<Sample>::iterator it; 
vector<Sample> sampleVector; 
it = std::unique(sampleVector.begin(), sampleVector.end(),myfunction); 
for (it=sampleVector.begin(); it!=sampleVector.end(); ++it) { 
      std::cout << *it << " "; <-- error must change it to &*it 
} 
+1

Читайте внимательно: http://en.cppreference.com/w/cpp/algorithm/unique – paddy

+0

Альтернативная ссылка, например: [link] (http://www.cplusplus.com/reference/algorithm/unique/) – QuestionMarcs

+0

@paddy, поэтому он работает только с примитивными типами данных? как вектор user2935569

ответ

2

Неверные скобки. Исправление:

Я не обвиняю вас в том, что вас поймали. Ошибки компилятора C++ являются отвратительными.

+0

Хорошо спасибо. наконец, удалось понять ссылки, которые вы использовали, и получил мою функцию удаления для дубликатов. – user2935569

0

Я думаю, вы можете попробовать этот код ниже

bool myfunction (int i, int j) { 
    return (i==j); 
} 
std::unique (myvector.begin(), myvector.end(), myfunction); 
std::cout << "myvector contains:"; 
for (it=myvector.begin(); it!=myvector.end(); ++it){ 
    std::cout << ' ' << *it; 
} 
std::cout << '\n'; 

Надеется, что это поможет!

+0

Вам не нужно использовать myfunction() как предикат – David

+0

да, вы правы –

0

Еще одна возможность, которую стоит рассмотреть, заключается в том, что вы можете поместить отсортированные элементы в std::set. Это сохранит упорядоченный порядок и обеспечит уникальность товара.

+0

Ok.finally мне удалось понять, что ссылка @paddy и я решил свои проблемы. спасибо за ваше предложение и помощь – user2935569

+0

, а также @QuestionMarcs – user2935569

Смежные вопросы