2010년 10월 28일 목요일

std::map 에서 key를 내가 원하는 놈으로 쓰기

map이란 놈이 조금 당혹스러운 면이 있다..

 

find 메소드에서 내가 원하는 결과를 얻을려면..

 

operator< 를 구현해줘야 하는데..

 

딴 operator가 없으니 가령.. "==" operator..

 

serial한 값을 넣어서 비교 해줘야 하는것 같다..

 

내가 능력이 딸려서 그런지는 모르겠지만..

 


 


struct net_event_key
{
 DWORD _type;
 WORD _lParam;
 WORD _wParam;

 explicit net_event_key( DWORD type, WORD lparam, WORD wparam ) {
  _type = type;
  _lParam = lparam;
  _wParam = wparam;
 }


 bool operator<( const net_event_key& param ) const {
  unsigned __int64 lvalue = 0;
  lvalue = (unsigned __int64 ) _type << (4 * 8);
  lvalue |= _lParam << ( 2 * 8 );
  lvalue |= _wParam;

  unsigned __int64 rvalue = 0;
  rvalue = (unsigned __int64 ) param._type << (4 * 8);
  rvalue |= param._lParam << ( 2 * 8 );
  rvalue |= param._wParam;

  return lvalue < rvalue;
 }

};


이런 식으로 해주니 된다..