【问题标题】:Cpp grid with boolean value具有布尔值的 Cpp 网格
【发布时间】:2015-12-21 11:17:33
【问题描述】:

对于一个项目,我们有一个加载随机块的扩展网格。在这个块中,我们放置随机对象。大块垂直和水平加载。玩家从 0,0 开始向上是 0,-1 向左 -1,0。我想看看是否加载了一个块。因为该区域正在扩展数组不是一个选项,所以我查看带有向量的选项。但是向量不能有negative 索引。我如何存储一个网格(有 2 个可能的负数)值和一个布尔值。我应该只用 3 个变量(2 个整数和一个布尔值)创建一个类,还是有其他选项,我可以在其中使用某种具有负值的多维向量。?

【问题讨论】:

  • @aviginsburg 它不断扩展,它基本上限制在最小/最大可能的浮点值。块根据玩家 x,y 位置加载/销毁(如果玩家移动 >20 x,则新块)。
  • std::map 用一个代表坐标的键怎么样?

标签: c++


【解决方案1】:

您可以使用map,例如:

typedef std::pair<int, int> coord;
typedef std::map<coord, bool> coord_bool_map;

用法:

coord_bool_map m;
m[coord(-1, -3)] = true;

【讨论】:

  • 如何将这个解决方案(我认为它非常漂亮)封装在一个类中,以便我们能够为它定义一个接口? (例如chunk::is_loaded() 或类似的东西)
  • 嗯,我想我不会那样做,但这只是个人喜好。 一个地图,为什么不保留已经提供的界面呢?
【解决方案2】:

但向量不能有负索引

不,但是您可以使用偏移量来转换索引。比如说,你有一个大小为 5 的向量,它应该代表一个从 -2...2 开始的 idice 的一维网格:

std::vector<T> grid = std::vector<T>(5);
int offset = 2;                // the offset, also index of origin
int start = -offset;           // first index
int end = grid.size() - offset // one past last index

// example use
int index = -1;
T element_at_index = grid[index + offset];

std::deque 从前端扩展容器可能更有效。

当你扩展正面时,记得更新偏移量。

如果您使用向量(或双端队列)的向量,那么您需要两个维度的偏移量。

【讨论】:

    猜你喜欢
    • 2016-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多