代码之家  ›  专栏  ›  技术社区  ›  Ariana

在C中初始化hash_map++

  •  -2
  • Ariana  · 技术社区  · 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>);
    

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

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

    1 回复  |  直到 1 年前
        1
  •  0
  •   Pepijn Kramer    1 年前

    你会得到这样的东西(我还没有添加向量,但这增加了初始化的额外{}级别)。我只是想给你一个主意

    #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;
    }