C++在不进行*序列化的情况下获取unsodered_set*的字节表示
C++ Get byte representation of unordered_set *without* serialization
在分布式计算设置中,我想向许多节点发送一个unordered_set。我知道C++中的序列化,例如使用boost::serialization
。我对序列化的不满是,在接收到序列化数据后,我面临着在每个节点上重建unordered_set
数据结构的成本。
我的想法是为unordered_set编写一个自定义分配器,它分配固定大小的连续内存,并在分配后返回起始内存地址。然后,我想获取unordered_set
的字节表示,通过有线发送它,并告诉接收节点这个内存块是unordered_set
。
这样行吗?你们对如何解决我的问题有其他想法吗?或者你有任何相关的指针吗?例如,写这样一个分配器?如有任何反馈,我们将不胜感激。
谢谢!
这可能是个坏主意,原因有几个:
- 通常,不同机器的哈希实现会有所不同,因此哈希表在接收机器上不再有效
- 哈希表实现通常会包含指针。你不能只是将指针从一台机器复制到另一台机器;它们是绝对地址(在大多数平台上)
- 发送机器和接收机器可能有不同的字节顺序(比如发送机器是x86,接收机器是POWER(例如XBox)),在这种情况下,你得到的结果将完全是胡言乱语
我只想发送一个键/值对的列表。将它们插入在接收端构建的哈希表中。
此外,请记住,当通过有线发送内容时,与带宽成本相比,处理能力成本通常很小。哈希表的空间效率很低——它们需要大量的空存储桶才能保持接近0(1)的性能。因此,即使您可以实现一种按原样跨线发送哈希表的方法,总体性能也可能会更差。
相关文章:
- 为什么我无法更改"set<set>"循环中的值<int>
- 对于set上的循环-获取next元素迭代器
- 在声明中合并两个常量"std::set"(不是在运行时)
- 有没有办法对std::unordered_set、std::unrdered_map、std::set、std::map
- 将 std::set 与基于键的比较器一起使用
- 如何使用set实现无序数据结构?
- 使用运算符调用 void 函数时出错<set>
- 修改"std::set"中用户定义类型的值
- 生成提升::hana::set 的常量表达式问题
- 如何在构造函数参数中初始化"std::set"?
- 如何使用 lower_bound/upper_bound 从 std::set 获取索引号?
- 如何在 C++ 中转发声明 std::set?
- 重构使用动态强制转换的 std::set 的比较运算符
- set::find 查找不存在的元素
- 为什么 std::set.erase(first, last) 会影响从中获取 (first, last) 的容器?
- 将 std:set<int32_t> 复制到 std::set <uint32_t>的好方法
- 错误 C2676:std::set::const_iterator 没有运算符 + 函数?
- std::set 是否将对象连续存储在内存中?
- 是否有一个 std::set 函数来确定不超过数字 x 的最大元素?
- google test PrintTo for std::set<std::string>