从c ++列表中删除重复项

时间:2010-07-15 23:50:43

标签: c++

我一直在寻找一种有效的解决方案来删除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()) );
}

2 个答案:

答案 0 :(得分:0)

您必须在有序列表上使用unique。所以你要做的第一件事就是对列表进行排序。

答案 1 :(得分:0)

您可以编写如下函数:

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

另外,如果你在课堂上使用它,你可能需要将该函数声明为静态。