如何在地图中成对查找值?

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

我对stl映射不熟悉,我想做的就是查找映射中是否存在配对的值。我将使用地图实现棋盘游戏。关键是玩家ID,值是一对,作为棋盘坐标。 ID和坐标都是唯一的。我已经找到了玩家ID,只需找到地图键即可。但是,我一直坚持寻找坐标作为成对的值。当我运行代码时,它应该检查ID或坐标是否被占用。 ID检查成功,但是坐标检查无法正常工作。我刚刚发现FindMatrix()函数有一些问题。

bool Board::Insertion(int id, int x, int y) 

此功能将以玩家ID和(x,y)作为输入,并检查它们是否被占用,如果其中一个被占用,则插入失败。 FindID()函数正在工作,但是下面的FindMatrix()函数不会检查坐标,因为该代码尽管未实际插入,但仍然报告插入成功。

我该如何解决?

    bool Board::FindMatrix(int x, int y)
    {
        for (auto it = matrix.find(make_pair(x, y)); it != matrix.cend(); it++)
        {
           if (x == it->second.first && y == it->second.second)
           {
               cout << "Matrix " << it->second.first << " " <<
                 it->second.second << " is found\n\n";
               return true;
           }
           else
           {
                cout << "Matrix " << it->second.first << " " <<
                 it->second.second << " is not found\n\n";
                return false;
           }
       }
    }

    int main()
    {
       Board b;

       b.Insertion(7, 0, 0);
       b.Insertion(2, 4, 1);
       b.Insertion(2, 4, 1); //report failure, same ID
       b.Insertion(3, 0, 0); //NOT reporting failure
       b.PrintByID();
    }
c++ dictionary c++11 stl
1个回答
0
投票

考虑此:

std::map<int, std::pair<int, int>> coordinates;

bool Board::FindMatrix(int x, int y)
{
    for(auto point : coordinates)
    {
        if(point.first == x && point.second == y)
        {
            std::cout << "Matrix " << x << "," << y << " is found\n\n";
            return true;
        }
    }

    std::cout << "Matrix " << x << "," << y << " is found\n\n";
    return false;
}

一些建议:

  1. 使用2 structint代替pair
  2. 使用[std::unordered_map][1]代替通常更适合的std::map
  3. 如果返回布尔值,则将FIndMatrix方法重命名为ContainsMatrix,否则返回位置
© www.soinside.com 2019 - 2024. All rights reserved.