가능한 중복 :
problem sorting using member function as comparator사용 클래스 메서드 비교기 종류
이 표준의 비교 기능 : 일종의 클래스 메서드를 사용할 수 있습니까? 예를 들어
:
std::sort(list.begin(),list.end(),object->comparator) //Doesn't compile
예라면, 나는이 작업을 수행하는 방법?
가능한 중복 :
problem sorting using member function as comparator사용 클래스 메서드 비교기 종류
이 표준의 비교 기능 : 일종의 클래스 메서드를 사용할 수 있습니까? 예를 들어
:
std::sort(list.begin(),list.end(),object->comparator) //Doesn't compile
예라면, 나는이 작업을 수행하는 방법?
예, boost::bind
사용할 수 있습니다 : 그것은`연산자를 <정의 할 수있는 옵션
#include <iostream>
#include <algorithm>
#include <iterator>
#include <boost/bind.hpp>
struct S {
bool ascending;
bool Compare(int lhs, int rhs) {
return ascending ? (lhs < rhs) : (rhs < lhs);
}
};
int main() {
int i[] = { 1, 3, 5, 7, 8, 6, 4, 2 };
S s;
s.ascending = true;
std::sort(i, i+8, boost::bind(&S::Compare, &s, _1, _2));
std::copy(i, i+8, std::ostream_iterator<int>(std::cout, " "));
std::cout << "\n";
s.ascending = false;
std::sort(i, i+8, boost::bind(&S::Compare, &s, _1, _2));
std::copy(i, i+8, std::ostream_iterator<int>(std::cout, " "));
std::cout << "\n";
}
이것은 받아 들여진 대답이어야합니다 ... 질문에 대답합니다 – sehe
'& S :: Compare'에서'&'가 필요합니까? 나는 보통 그렇게하기에 잘못이 아니기 때문에 나는 보통 거기에 넣는다. 그러나 나는'&'없이 전달 된 함수 포인터의 예를 보았 기 때문에 궁금했다. – gred
@gred - [경험적으로, 예] (http://ideone.com/bEkBd). 나는 표준에서 편리한 장과 절을 가지고 있지 않지만,'& S :: Compare'는 함수에 대한 포인터가 아니기 때문에 그럴 것이라고 생각한다. 그것은 완전히 다른 짐승 인 멤버 함수에 대한 포인터입니다. –
당신은 콜백으로 기능을 제공해야합니다
std::sort(list.begin(),list.end(),object::comparator)
가정 함수가 이미 static
, 나는 다른 문제가 표시되지 않습니다.
정적으로 동의하지만 비 정적 방법은 어떻습니까? – Vik
@Vik은 중복 가능성이있는 링크를 확인합니다. –
가'클래스 하시나요? –
이미 정의 됨'operator()' – Vik