C++ 具有布尔值的Cpp网格

C++ 具有布尔值的Cpp网格,c++,C++,对于一个项目,我们有一个扩展的网格,它加载随机块。在这个区块中,我们放置随机对象。弹簧是垂直和水平加载的。玩家从0,0开始,向上是0,-1向左-1,0。我想看看是否加载了块。因为区域正在扩展,所以数组不是一个选项,所以我查看带有向量的选项。但是向量不能有索引。如何存储网格(具有2个可能的负值)值和布尔值。我应该用3个变量(2个整数和一个布尔值)创建一个类,还是有其他选项,在那里我可以使用带有负值的多维向量 您可以使用地图,例如: typedef std::pair<int, int>

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

您可以使用
地图
,例如:

typedef std::pair<int, int> coord;
typedef std::map<coord, bool> coord_bool_map;
但是向量不能有负的索引

不可以,但可以用偏移量转换索引。比如说,你有一个大小为5的向量,它应该表示一个一维的IDIes网格,从-2…2:

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::vector grid=std::vector(5);
int offset=2;//偏移量,也是原点索引
int start=-offset;//第一索引
int end=grid.size()-offset//one-pass-last索引
//示例使用
int指数=-1;
T元素在索引处=网格[索引+偏移];
从正面展开容器时,
std::deque
可能更有效

展开正面时,请记住更新偏移


如果使用向量向量(或deques),则两个维度都需要偏移。

@aviginsburg它不断扩展,基本上限制为最小/最大可能的浮点值。chunck是根据玩家的x,y位置加载/销毁的(如果玩家移动>20X,则为新chunck)。使用代表坐标的键
std::map
如何?将此解决方案(我认为非常漂亮)封装在一个类中,以便我们能够为其定义一个接口如何?(例如,
chunk::is_loaded()
或诸如此类的东西)嗯,我想我不会那么做,但那只是个人品味。这是一张地图,为什么不保留已经提供的接口呢?
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];