2010-12-10 5 views
3

나는 한 쌍의 std :: vector가 있다고 가정합니다. 효율적으로 어떻게 std :: find 메서드를 사용하여 벡터의 적어도 하나의 요소가 (false, false)와 같지 않은지 확인하십시오.쌍의 벡터에 대한 조건을 찾으십시오

감사

답변

4

std::pair 과부하 operator==, 당신은 긍정적를 위해 std::find을 사용할 수 있도록 :

bool b = std::find(v.begin(), v.end(), std::make_pair(false, false)) == v.end(); 

을하고 부정적인 위해 std::find_if를 사용할 수 있습니다

bool b = std::find_if(v.begin(), v.end(), 
         std::bind2nd(std::not_equal_to<std::pair<bool, bool> >(), 
            std::make_pair(false, false))) 
      != v.end(); 

두 번째는 할 수있다 훨씬 더 깔끔하게 C++로 작성했습니다. 0x :

+0

모든 요소가 (false, false)인지 확인해야한다는 것이 유감입니다. – Bob

+0

@Banana : 'find_if'접근 방식을 사용하고 결과를 무효화 할 수 있습니다 (요소가없는 경우). 요소가 (false, false)와 같으면 모든 요소는 (false, false)와 같아야합니다. 또한 C++ 0x는 테스트를 더욱 깨끗하게 해주는'all' 알고리즘과'any' 알고리즘을 추가합니다. –

+0

두 번째 솔루션이 내 문제를 해결했지만 세 번째 솔루션에 오류가있을 수 있습니다. – PersianGulf

관련 문제