2013-07-03 2 views
0

, 나는 클래스가비교에서 멤버 함수를 사용하는 방법은 무엇입니까? 예를 들어

class A 
{ 
public: 
    int Value() const; 
}; 

어떻게 std::lower_bound 함수의 비교로 A::Value()을 사용할 수 있나요?

std::vector<A> v; 
std::lower_bound<v.begin(), v.end(), ???>(v, 1); 

어떻게 주어진 Valuev의 요소를 찾을 수

.

std::find_if<???, ???>(v.begin(), v.end(), ???); // or use other function 
+1

기다립니다 ... 무엇 : –

+0

나는 나의 질문을 간단하게한다. A :: Name()입니다. 나는 그들의 문자열 이름과 비교하고 싶다. – user1899020

+0

위의'Name()'을 볼 수 없습니까? –

답변

4

두 개의 A 인스턴스를 비교하는 이진 조건자를 전달해야합니다. 예를

std::lower_bound(v.begin(), 
       v.end(), 
       [](const A& lhs, const A& rhs) 
       { return lhs.Value() < rhs.Value(); }); 

또는, C++ 11을 지원하지 않는 경우를 들어

find_if에 관해서는
bool comp(const A& lhs, const A& rhs) 
{ 
    return lhs.Value() < rhs.Value(); 
} 

std::lower_bound(v.begin(), v.end(), comp); 

, 원칙은 단항 술어를 필요로하는 것을 제외하고, 즉 펑터 비슷하다 단일 A을 사용하고 bool을 반환합니다. , C++ (11)없이

A valueToFind; 
std::find_if(v.begin(), 
      v.end(), 
      [valueToFind&](const A& arg) 
      { return valueToFind.Value() == arg.Value() }); 

bool isEqual(const A& lhs, const A& rhs) 
{ 
    return lhs.Value() == rhs.Value(); 
} 

A valueToFind; 
std::find_if(v.begin(), v.end(), std::bind1st(isEqual, valueToFind)); 
+3

+1 정말로 열심히 질문하는 것이 어렵지 만, 아마도 이것이 옳은 대답 일 것입니다. –

1

그리고 find_if에 대한

, 당신은 뭔가를해야 할 것? 'Value'로 무엇을하려합니까?