gpt4 book ai didi

c++ - 覆盖 std::equal

转载 作者:行者123 更新时间:2023-12-03 12:50:51 25 4
gpt4 key购买 nike

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

关于c++ - 覆盖 std::equal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23794565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com