有没有一种简单的方法可以将自定义分配器(或者更好的是通过配置标准分配器)与C++中的无序哈希映射或多重映射一起使用,以使键,值和存储桶结构始终保持在相对内存中的连续内存中包装形式?

如果是这样,那么可以使用这样的分配器来保存和恢复映射,而无需显式的序列化要求,即遍历键,然后通过插入进行还原?

如果不是,是否有另一种方法可以对哈希映射进行序列化和反序列化,而不必在反序列化期间重新哈希每个密钥?

最佳答案







没有







不可以,因为在程序的两次运行之间,该标准表示您无法假设哈希值是相同的。

但是您的问题有一个错误的前提。这不是序列化unordered_map的方法。



是-序列化:

serialise_length(archive, map.size());
for (auto const& element : map)
{
    auto const& key = element.first;
    auto const& value = element.second;
    serialise_nvp(archive, key, value);
}

当然,您将提供serialise_length()serialise_nvp()函数以及archive对象。

对于反序列化:
auto map = std::unordered_map<Key, Value>();
auto length = deserialise_length(archive);
map.reserve(length);
while (length--)
{
    auto key = deserialise<Key>(archive);
    auto value = deserialise<Value>(archive);
    map.emplace(std::move(key), std::move(value));
}

要么
auto map = std::unordered_map<Key, Value>();
auto length = deserialise_length(archive, length);
map.reserve(length);
while (length--)
{
    auto kv = deserialise_nvp<Key, Value>(archive);
    map.insert(std::move(kv));
}

09-25 22:31
查看更多