C++ 中 hash_map 的初始化

问题描述 投票:0回答:1

我用 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>);

我收到错误消息“此声明没有存储类或类型说明符。”我该如何解决这个问题?是否有其他方法可以实现相同的目标,例如使用向量或数组而不是地图?

与数组和向量相比,访问映射中的元素是否更快?在我的具体情况下,访问元素的速度至关重要,插入和删除等方法并不是重要的考虑因素。

c++ arrays vector hashmap
1个回答
0
投票

你会得到类似这样的东西(我还没有添加向量,但这增加了额外的 {} 初始化级别)。

#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;
}
© www.soinside.com 2019 - 2024. All rights reserved.