Я искал эффективное решение для удаления дубликатов из списка C++.удаление дубликатов из списка C++
Список состоит из указателей на объект класса, который имеет идентификатор атрибута. Я хочу удалить дубликаты на основе этого идентификатора.
Для моей цели будет использоваться уникальный метод списка STL, в котором мы можем передать BinaryPredicate. т.е.
void unique (BinPred pr);
Я искал в Интернете, как использовать этот метод, n получил пример, в котором мы можем объявить функцию, возвращающую boolean, и использовать «имя» этой функции как двоичный предикат.
Но это не работает.
Что на самом деле это бинарный предикат и как его использовать? ... Любая помощь будет оценена по достоинству. Вот фрагмент кода:
class SP_MDI_View {
..
..
bool removeDupli(SP_DS_Node*, SP_DS_Node*);
bool DoReductionGSPN(SP_DS_Node*, SP_ListNode*, SP_DS_Node*);
..
..
}
SP_MDI_View::DoReduction(...) {
SP_ListNode setZ; // typedef list<SP_DS_Node*> SP_ListNode, where SP_DS_Node is some other class
setZ.clear();
setZ.merge(tempsubset);
setZ.merge(setX);
setZ.push_back(*cs_iter);
setZ.unique(removeDupli); //Error here
}
bool SP_MDI_View::removeDupli(SP_DS_Node* first, SP_DS_Node* second) {
return ((first->GetId())==(second->GetId()));
}
Это звено, которое имеет пример я толкую: http://www.cplusplus.com/reference/stl/list/unique/ это действует? mylist.unique (same_integral_part); Мой компилятор не принимает его как действительный оператор. –
Что значит «не работает»? Ошибка компиляции? Segfault? – SoapBox
сообщение ** ваш ** код, является ли функция-член? какова область действия? –