地图与std :: pair地图的优点是什么?
问题描述:
以下制作地图的方式有哪些优点和缺点,以表示二维网格。网格应该可以在任何时候填充,而不需要为整个事物分配内存,这就是为什么我不使用二维数组的原因。地图与std :: pair地图的优点是什么?
std::map<int, std::map<int, Tile*>* >* tiles;
std::map<std::pair<int, int>, Tile*>* tiles;
或者如果你有另一个更好的主意让我知道。对不起,如果这是一个被问及很多问题。
答
这显然是一个不同的数据结构,取决于你如何访问它。
第一个更像是一个2级树结构。再次将x坐标映射到几个y坐标。这听起来有点不适合你的问题。
第二个不允许您获取特定x坐标的所有元素(或者您可以调用它)。反正你可能不需要?
如果您需要将(x,y)坐标映射到平铺,则第二种方法可能会正常。
答
为什么不使用向量的矢量,std :: vector < std :: vector>?
这样会更好,除非你的网格很稀疏(并非网格中的每个元素都有一个平铺),并且你想节省内存。如果速度是问题,使用矢量的访问时间会更好,因为std :: map使用tress作为基础结构。
由于'std :: map'中的键是有序的,所以您肯定可以遍历所有具有特定x坐标的元素。从第一个键开始,至少与make_pair(x,INT_MIN)一样大,然后继续后续的键,直到到达结尾或找到其x坐标不同的一个键。无论使用哪种数据结构都无法做到,可以轻松地通过具有特定y坐标的元素进行迭代。 – rici 2013-02-11 18:18:20
那么这两种方式都没有明显的内存或速度问题?目前我可以通过x坐标指向的地图访问它,然后获取y坐标指示我从该地图指向的地图块。我一直在想它,因为主要的地图是一列地图,以及瓷砖的列和地图。 – rekh127 2013-02-11 19:21:42