나는 C++ 목록에서 중복을 제거하는 효과적인 솔루션을 찾고있었습니다.C++ 목록에서 중복 제거
목록은 속성 ID가있는 클래스 객체에 대한 포인터로 구성됩니다. 해당 ID를 기반으로 중복을 제거하고 싶습니다.
내 목적으로 STL 목록의 고유 한 메서드가 작동하여 BinaryPredicate를 전달할 수 있습니다. 즉
void unique (BinPred pr);
이 방법을 사용하는 방법에 대해 인터넷에서 검색했습니다. n은 부울을 반환하는 함수를 선언하고이 함수의 "이름"을 이진 조건 자로 사용할 수있는 예제를 제공합니다.
하지만 작동하지 않습니다.
이 2 진 술어는 실제로 무엇이며 어떻게 사용합니까? ... 도움이 될 것입니다.
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); 제 컴파일러가 올바른 구문으로 사용하지 않습니다. –
"작동하지 않는다"는 것은 무엇을 의미합니까? 컴파일 오류? 세고 폴트? – SoapBox
** ** 귀하의 ** 코드는 회원 기능입니까? 범위가 뭐야? –