정렬 알고리즘에 어떤 기능을 전달 했습니까? upper_bound와 lower_bound에 대해 동일한 것을 사용할 수 있어야합니다.
비교 작업을 수행하는 가장 쉬운 방법은 검색 값으로 설정된 키 필드로 더미 개체를 만드는 것입니다. 그러면 비교는 항상 같은 대상 사이에있게됩니다.
편집 : 어떤 이유로 인해 적절한 비교 값으로 더미 개체를 가져올 수없는 경우 비교 functor를 만들 수 있습니다. functor는 operator()에 대해 다음과 같은 세 가지 오버로드를 제공 할 수 있습니다.
struct MyClassLessThan
{
bool operator() (const MyClass & left, const MyClass & right)
{
return left.key < right.key;
}
bool operator() (const MyClass & left, float right)
{
return left.key < right;
}
bool operator() (float left, const MyClass & right)
{
return left < right.key;
}
};
자세히 알 수 있듯이 그렇게가는 길입니다.
std::lower_bound(coll.begin(), coll.end(), target, CMyClass::CompareFloatField);
이가 좀 더합니다 :
그게 문제 였어, 정렬 함수는 MyClass 객체에 두 개의 const 참조를 취한다. 검색 함수는 MyClass와 float을 가져야합니다. bind2nd()를 사용하는 것에 대한 동일한 문제가 있습니다. 비교 연산자 인 –
()은 왜 그런 생각을하지 않았습니까? STL을 많이 사용할수록 파이썬을 더 좋아합니다. –
고맙습니다. const MyClass & left, const MyClass & right? – chmike