我对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();
}
考虑此:
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;
}
一些建议:
struct
的int
代替pair
[std::unordered_map][1]
代替通常更适合的std::map
。FIndMatrix
方法重命名为ContainsMatrix
,否则返回位置