2013-10-09 2 views
2

지도와 관련하여 해결할 수없는 문제가 발생했습니다. 지도에서 다루는 두 가지 변수, 즉지도가 필요하지만 맞춤 유형은 무엇입니까?사용자 정의 유형의 내부 인수가

두 변수 x와 y로 구성된 'Point'라는 객체가 있다고 가정 해 보겠습니다. 맵을 선언하는 것이 타당한가 : map ?. 내가 컴파일 오류가 발생하고있어

class Point 
{ 
public: 
double x; 
double y; 
Point(double x, double y) 
{ 
    this->x=x; 
    this->y=y; 
} 
}; 

int main(int argc, const char * argv[]) 
{ 
     map<Point,int> myMap; 
     Point p1(0,0); 
     myMap[p1]=1; 
} 

아래의 코드를보고하십시오 : '(CONST 포인트'와 'const를 포인트') 바이너리 표현에 잘못된 피연산자 '.

왜 이런 일이 일어나는 지 알고 있으며 어떻게 해결할 수 있습니까? 어떤 도움이 정말 감사하겠습니다 :).

건배!

답변

2

Pointoperator<을 제공해야합니다. std :: map 내부적으로 operator<을 호출하여 키를 정렬합니다.

bool operator<(const Point& lhs, const Point& rhs) 
{ 
    // compares lhs.x to rhs.x, 
    // then lhs.y to rhs.y 
    return std::tie(lhs.x, lhs.y) < std::tie(rhs.x, rhs.y); 
} 

std::less<key>는 디폴트 값, map, 그것은 템플릿 파라미터의 함수 Compare 소요 참조.

std::map은 고유 키가있는 키 - 값 쌍을 포함하는 정렬 된 연관 컨테이너입니다. 키는 비교 기능을 사용하여 정렬됩니다.을 비교하십시오. 검색, 제거 및 삽입 작업은 로그 복잡성을 갖습니다. 지도는 일반적으로 빨강 - 검정 나무로 구현됩니다.

관련 문제