- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将把国际象棋游戏表示为 C++ 结构。我认为,最好的选择是树结构(因为在每个深度我们都有几个可能的移动)。
这是一个好的方法吗?
struct TreeElement{
SomeMoveType move;
TreeElement *parent;
std::vector children;
};
如何高效地将这类数据存储在文件中?有没有办法确保整个树结构将存储在内存的同一部分,这将允许使用 mmap 函数?
1 Câu trả lời
要将数据存储在内存的同一部分,您可能需要为 std::vector
提供一个分配器对象。你使用,并从你的 block 中分配。
为了能够序列化它,而不是存储实际的指针,您可以考虑在 block 中存储偏移量。然后当你读回数据时,你可以将 block 的起始地址添加到每个偏移量以将其转回一个地址。
根据您使用的操作系统/编译器,可能已经对此提供了一些支持。比如微软的编译器支持__based
指针,这几乎就是我所描述的:一个基地址,每个基于该地址的指针实际上只是一个偏移量,而不是一个完整的指针。提到mmap
表示您可能无法直接使用它,但khả thi您正在使用的编译器/操作系统有类似的东西。否则,您可能必须自己完成这项工作(例如,使用 based_pointer
类)。
真正的问题是您为什么要尝试序列化移动树。在典型情况下,您最好只保存当前棋盘位置(或者,大约等效地,移动历史记录)并在需要时/如果需要从中重新生成移动树。它足够小,非常容易存储。
关于博弈树的C++实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9350417/
我正在尝试对下面的图形问题进行分类或寻找其解决方案的提示。 有一个(邻接)矩阵可以包含 3 种类型的元素:单位、点和简单地形。 地形没有具体含义。 单位有一个位置(x,y 由矩阵定义)和他们可以获得的
Tôi là một lập trình viên xuất sắc, rất giỏi!