我一直在寻找一种有效的解决方案来删除C ++列表中的重复项。
该列表包含指向具有属性ID的类对象的指针。我想根据该ID删除重复项。
出于我的目的,STL列表的唯一方法将在我们可以传递BinaryPredicate的情况下工作。即。
void unique(BinPred pr);
我在互联网上搜索了如何使用这个方法,我得到一个例子,我们可以声明一个返回布尔值的函数,并使用该函数的“名称”作为二进制谓词。
但它不起作用。
这个二进制谓词实际上是什么以及如何使用它? ... 任何帮助将不胜感激。 以下是代码段:
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()) );
}
答案 0 :(得分:0)
您必须在有序列表上使用unique。所以你要做的第一件事就是对列表进行排序。
答案 1 :(得分:0)
您可以编写如下函数:
bool foo (int first, int second)
{ return (first)==(second) ); }
另外,如果你在课堂上使用它,你可能需要将该函数声明为静态。