2016-07-06 1 views
0

내가 내 질문에 좀 더 명확하게하기 위해 다음과 같은 코드를 제공합니다 :왜 컨테이너의 기본 요소가 boost :: tuple 일 때 std :: find를 사용할 수 없습니까?

bool bFind; 
    boost::tuple<int> abc; 
    //int abc; 
    std::vector<boost::tuple<int> > myArray; 
    //std::vector<int> myArray; 
    bFind = is_vector_contains(myArray,abc); 

is_vector_contains하는 템플릿 함수입니다 :

template<typename T> 
    bool is_vector_contains(const std::vector<T> &vecArray, const T &element) 
    { 
     if(std::find(vecArray.begin(),vecArray.end(),element) == vecArray.end()) 
      return false; 
     else 
      return true; 
    } 

나는 위의 코드를 컴파일 할 때, 나는 다음과 같은 컴파일 오류가 있습니다

Error 1 error C2678: binary '==' : no operator found which takes a left-hand operand of type 'const boost::tuples::tuple<T0>' (or there is no acceptable conversion) 

아이디어가 있으십니까? 이 방법으로 등호 연산자를 정의하려고 시도했지만 컴파일에 성공하지 못했습니다.

bool operator == (const boost::tuple<int> &a, const boost::tuple<int> &b) 
    { 
     return true; 
    } 
+0

그래서, 당신이 이해하기 위해 무엇을하려고 했습니까? 'boost :: tuple' 문서를 확인 했습니까? (우연히도, 저는 여러분의 함수 이름이'is_vector_contains()'가 다소 이상합니다.). – Walter

+0

@Waller 감사합니다. 당신이 제안한대로 설명서를 읽었을 때 대답과 동일한 대답을 발견했습니다. – feelfree

답변

1

boost::tuple의 비교 연산자는 당신이 포함해야하는 별도의 헤더에 정의되어 있습니다

#include <boost/tuple/tuple_comparison.hpp> 
+1

이것이 올바 른 것처럼 보이지만 그 이유는 무엇입니까? 그 뒤에있는 동기는 무엇입니까? 사용자가 다른 방식으로 비교를 정의 할 수 있도록하려면 (문제가 생길 것입니다)? 부스트는 계속 나를 혼란스럽게합니다. – Walter

+0

@Walter 나도 몰라. 나는 또한 그것이 성가신 것을 발견한다. 그러나 다행히도 그것은 찾기 위해 아주 사소하다. – juanchopanza

+0

@Walter @ juanchopanza 실제로 제 경우에는 비교가 가능하도록 다른 헤드 파일을 포함시켜야한다는 것을 모릅니다. 실제로 equal 연산자를 구현하지만 작동하지 않습니다. 나는 그것을 분명히하기 위해 나의 질문을 할 것이다. – feelfree

관련 문제