以下製作地圖的方式有哪些優點和缺點,以表示二維網格。網格應該可以在任何時候填充,而不需要爲整個事物分配內存,這就是爲什麼我不使用二維數組的原因。地圖與std :: pair地圖的優點是什麼?
std::map<int, std::map<int, Tile*>* >* tiles;
std::map<std::pair<int, int>, Tile*>* tiles;
或者如果你有另一個更好的主意讓我知道。對不起,如果這是一個被問及很多問題。
以下製作地圖的方式有哪些優點和缺點,以表示二維網格。網格應該可以在任何時候填充,而不需要爲整個事物分配內存,這就是爲什麼我不使用二維數組的原因。地圖與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