覆盖std::平等

Override std::equal

本文关键字:平等 std 覆盖      更新时间:2023-10-16

在为std::unordered_map的equal_to操作符提供专化时,我想知道是否有可能确定当前存储在hashmap中的数据是哪个lhs或rhs ?我想这样做:

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;            
    }
};

谢谢。

让临时METADATA包含一个标志,该标志决定是否使用全局指针。OffsetPointer可能使用前哨值。

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;            
    }
};