简体   繁体   中英

removing duplicates from a c++ list

I have been looking for an effective solution to remove duplicates from a C++ list.

The list consists of pointers to a class object which has an attribute ID. I want to remove duplicates based on that ID.

for my purpose, the unique method of the STL list will work in which we can pass a BinaryPredicate. ie

void unique( BinPred pr );

I searched on the internet about how to use this method, n got an example in which we can declare a function returning boolean and use the "name" of that function as Binary Predicate.

But it's not working.

What actually is this binary predicate and how do i use it ? ... Any help will be appreciated. Here is the code snippet:

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()) );
}

You have to use unique on an ordered list . So the first thing that you must do is sort the list.

You could write a function like:

bool foo (int first, int second)
{ return (first)==(second) ); }

Also, you might need to declare the function as static if your using it in class.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM