2016-10-08 7 views
0

나는이 사각형 객체의 비교에 대해 다음 구조체 ..왜 내 개체가 std :: set에 삽입되지 않습니까?

struct rectcomp { 
    bool operator() (const Rect& lhs, const Rect& rhs) const{ 
     return lhs.size.width<rhs.size.width; 
    } 
}; 

나는 내가 저장하고자 다음과 같은 세트가 내 사각형의

std::set<Rect,rectcomp> _availableRects; 

나는 다음과 같은 코드를 삽입;

void insertPairOfRects(const Rect rect1,const Rect rect2){ 
    _availableRects.insert(rect1); //first line 
    _availableRects.insert(rect2); //second line 
} 

문제는 rect1은 항상 삽입되지만 rect2는 삽입되지 않는다는 것입니다. 내가 insertPairOfRects 함수의 첫 번째 줄 뒤에 디버거를 통해 단계를 밟을 때 insertPairOfRects ...의 객체 수가 증가하는 것을 분명히 볼 수 있지만 두 번째 경우에는 그렇지 않습니다.

나는 어떤 실수를하나요?

편집 : 내 비교 기능에서 실수로 인한 것 같습니다. 내가 전에 세트에 대해 한 번도 써 ​​본 적이 없으므로 아마 여기에 근본적인 오해라고 상상해보십시오.

답변

1

나는 rect1.size.width == rect2.size.width이라고 가정 할 것입니다.이 경우 두 경우 모두 비교기가 false를 반환합니다. 세트가 중복을 허용하지 않기 때문에 오브젝트가 세트에 삽입되지 않습니다. 직사각형을 변경하거나 더 자세한 비교자를 만드십시오.

+1

네, 그게 문제였습니다. 당신이 올바른지. 7 분 안에 답을 받아 들일 수 있습니다. –

관련 문제