2010-05-24 5 views
0

C++의 경우 "인덱스"클래스를 만들어야하는 경우가 많습니다. 예를 들어 우리가 pair<string, pair<int, int> >로 게임 ID를 표현한다면C++의 구조체 비교

class GameID{ 
    public: 
     string name; 
     int regionid; 
     int gameid; 
     bool operator<(const GameID& rhs) const; 
} 

지금, 운영자 비교 그냥 함께 제공됩니다. std :: pair <>을 사용할 필요없이 자동 연산자 비교를 얻을 수있는 다른 방법이 있습니까?

답변

6

std::pairoperator< 과부하를 구현하므로 std::pair을 사용할 때 operator<이 표시됩니다. std::string 또한 operator<을 오버로드하기 때문에 std::string을 쌍의 유형 중 하나로 사용하면 작동합니다.

자신의 클래스 유형의 개체를 비교하려면 operator<을 오버로드해야합니다.

1

여기에서 정의하는 구조체 또는 클래스의 요소를 비교하려면 비교할 방법에 따라 ">"또는 "<"에 대한 고유 한 연산자 오버로드를 정의해야합니다.

는 예를 들어, 당신은 이런 식으로 뭔가를 할 수 :

마틴 주석에서 지적한 바와 같이
class GameID{ 
    public: 
     string name; 
     int regionid; 
     int gameid; 


     inline bool operator > (Game_ID first_game, Game_ID second_game) 
     { 
      return (first_game.gameID() > second_game.gameID()); 
     } 

} 

, 표준 기능 알고리즘은 운영자 <의 관점에서 사물을 정의합니다. 따라서 연산자 <과 연산자 ==를 정의하면 다른 관계 연산자가이를 통해 정의 될 수 있으므로 표준 라이브러리는 자동으로 그렇게 할 수있는 추가 기능을 제공합니다.

+0

모든 표준 함수 알고리즘은 연산자 <의 관점에서 사물을 정의합니다. <연산자와 operator == 연산자를 정의하면이 두 연산자를 통해 다른 관계 연산자를 모두 정의 할 수 있으므로 표준 라이브러리는 자동으로 그렇게 할 수있는 추가 기능을 제공합니다. –

+0

@ Martin, 좋은 지적입니다. 이 정보를 포함하도록 수정되었습니다. – shuttle87