在为std :: unordered_map的equal_to运算符提供特化时,我想知道是否可以确定哪个lhs或rhs是当前存储在hashmap中的数据?我想做这样的事情:
template<>
struct equal_to<METADATA>
{
bool operator() (METADATA const& data1, METADATA const& data2)
{
if (data1.Size == data2.Size)
{
// Need to look up the stored pointer in a global data structure
SIZE_T Pointer = g_Pointer + data1.Offset;
return memcmp(reinterpret_cast<void*>(Pointer), reinterpret_cast<void*>(data2.Pointer), data1.Size) == 0;
}
return false;
}
};
感谢。
答案 0 :(得分:0)
让临时METADATA
包含一个标志,确定是否使用全局指针。可能使用Offset
或Pointer
的标记值。
template<>
struct equal_to<METADATA>
{
bool operator() (METADATA const& data1, METADATA const& data2)
{
if (data1.Size == data2.Size)
{
// Need to look up the stored pointer in a global data structure
void * pointer1 = data1.Pointer;
if (pointer1 == NULL)
pointer1 = g_Pointer + data1.Offset;
void * pointer2 = data2.Pointer;
if (pointer2 == NULL)
pointer2 = g_Pointer + data2.Offset;
return memcmp(pointer1, pointer2, data1.Size) == 0;
}
return false;
}
};