문제 정렬에서 비교자로 멤버 함수
제공된 코드를 사용하려고 하면 컴파일러에서 정규화되지 않은 주소 검색을 금지하는 오류가 발생합니다. 또는 괄호 안에 비정적 멤버 함수를 넣어 멤버 함수에 대한 포인터를 형성합니다. 문제는 doCompare 멤버 함수의 비정적 정의에서 발생합니다.
이 문제를 해결하려면 doCompare를 정적으로 선언해야 합니다. 그러나 함수가 MyClass 내의 데이터에 액세스해야 하는 경우 doCompare from:
doCompare( const int & i1, const int & i2 ) { // use some member variables }
To:
bool operator () ( const int & i1, const int & i2 ) { // use some member variables }
doSort 메서드를 변경하여 클래스를 비교 펑터로 변환할 수 있습니다. 그런 다음 다음 구문을 사용하여 비교 함수를 호출해야 합니다.
doSort() { std::sort(arr, arr+someSize, *this); }
또는 다음을 활용할 수도 있습니다. std::mem_fun은 멤버 함수를 자유 함수로 변환합니다. 그러나 std::sort는 값별로 비교 함수를 허용하므로 클래스 자체 내에 함수를 래핑하는 것이 좋습니다. 이 접근 방식을 사용하여 수정된 코드는 다음과 같습니다.
class MyClass { struct Less { Less(const MyClass& c) : myClass(c) {} bool operator () ( const int & i1, const int & i2 ) {// use 'myClass'} MyClass& myClass; }; doSort() { std::sort(arr, arr+someSize, Less(*this)); } }
위 내용은 `std::sort`에서 멤버 함수를 비교자로 어떻게 사용할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!