2013-05-06 2 views
-1

У меня есть класс, конструктор выглядит следующим образом:C++ как удалить дубликаты из вектора типа класса?

myclass(int=0,string="",int=0,string="",int=0,int=0, 
     int=0,int=0,string="",int=0,int=0); 

и вектор с элементами этого типа

vector<myclass>myvect; 

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

std::vector<myclass>::iterator it; 
    it=std::unique (myvect.begin(), myvect.end()); 
    myvect.resize(std::distance(myvect.begin(),it)); 

Я получаю эту ошибку

:algorithm(1862): error C2678: binary '==' : 
no operator found which takes a left-hand operand 
of type 'myclass' (or there is no acceptable conversion) 

любая идея почему? Есть ли способ удалить дубликаты из этого вектора?

+1

Реализовать 'оператор ==' 'для myclass'? – Morwenn

+1

Простым решением является реализация собственного оператора равенства. –

ответ

2

Алгоритм std::unique должен знать, как сравнить два объекта myclass для обеспечения равенства. Есть два способа сделать это. Первый - реализовать myclass::operator==. Во-вторых, передать бинарный предикат std::unique:

std::unique (myvect.begin(), myvect.end(), 
      [](const myclass& a, const myclass& b) { 
       return /* some expression to test equality */; 
      }); 
+0

Большое спасибо, мой вопрос был неправильным. Я имею в виду, как удалить дубликаты. – Sonicpath

1

Возможно, вы не использовали myclass::operator==.

1

Вам необходимо перегрузить operator == для вашего класса myclass, чтобы применить алгоритм unique.

Цитируя std::unique документации:

Функция использует оператор == для сравнения пары элементов (или пред, в версии (2)).

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