我用 C++ 创建了一个地图,使用以下结构来存储不同棋子的方向:
map<Piece, vector<tuple<Offset, Type, Color>>> PIECE_DIRECTIONS;
当尝试向地图添加元素时,例如:
PIECE_DIRECTIONS[Pawn].push_back(tuple<Up, Push, Red>);
PIECE_DIRECTIONS[Soldier].push_back(tuple<Up, Push, Red>);
我收到错误消息“此声明没有存储类或类型说明符。”我该如何解决这个问题?是否有其他方法可以实现相同的目标,例如使用向量或数组而不是地图?
与数组和向量相比,访问映射中的元素是否更快?在我的具体情况下,访问元素的速度至关重要,插入和删除等方法并不是重要的考虑因素。
你会得到类似这样的东西(我还没有添加向量,但这增加了额外的 {} 初始化级别)。
#include <string>
#include <map>
enum class Piece
{
Pawn,
Bishop,
Rook
};
enum class Color
{
Black,
White
};
struct Direction
{
int horizontal;
int vertical;
};
struct Movement
{
Color color;
Direction direction;
};
int main()
{
std::map<Piece,Movement> moves{
{ Piece::Pawn, // <- key of your map, e.g. a Piece enum value
{
Color::White, // First member of Movement, e.g. Color enum value
{0,1} // Second member of Movement, Direction {0 horizontal, 1 vertical)
}
},
{ Piece::Bishop, { Color::Black, {8,8} } }
};
return 0;
}