C++ - CAtlMap에서 KEY 값을 두 개 사용하고 싶을 때
예제 코드
#include <atlcoll.h>
#include <boost/functional/hash.hpp> // hash를 만들기 위해 사용
// KEY가 될 유저 정의형
struct FRIENDKEY
{
union
{
struct KEY
{
INT32 MyID;
INT32 FriendID;
};
KEY Key;
INT64 nValue;
};
FRIENDKEY() : nValue(0) {}
FRIENDKEY(INT64 _value) : nValue(_value) {}
FRIENDKEY(INT32 _MyID, INT32 _FriendID)
{
Key.MyID = _MyID;
Key.FriendID = _FriendID;
}
};
class FriendKeyTraits : public CElementTraits <FRIENDKEY>
{
public:
static ULONG Hash(const FRIENDKEY& element) throw()
{
boost::hash<INT64> hasher;
return (ULONG)hasher(element.nValue);
}
static bool CompareElements(const FRIENDKEY& a, const FRIENDKEY& b)
{
return (a.Key.nMyID == b.Key.MyID && a.Key.FriendID == b.Key.FriendID) ? true : false;
};
};
struct FRIENDPRESENT
{
INT32 a;
INT32 b;
char c;
INT16 d;
};
typedef CAtlMap<FRIENDKEY, FRIENDPRESENT, FriendKeyTraits > MAP_FRIEND;
MAP_FRIEND m_Frinedlist;
bool IsExitFriendPresent( INT32 MyID, INT32 FriendID )
{
FRIENDKEY FriendKey( MyID, FriendID );
bool bIsExit = m_Frinedlist.Lookup( FriendKey );
return bIsExit;
}
이 글은 2019-05-18에 작성되었습니다.