如何存储坐标以便与以后的坐标进行比较

时间:2014-01-17 10:43:46

标签: c++ c++11

这是作业。 我有一个旅行网格的机器人。我需要存储他访问的每个坐标,然后检查他之前是否访问过它们。现在我将坐标存储在一个配对中,但是如何将配对存储在一个列表/数组中,以便我可以比较他访问过的后续坐标,如果他以前没有在那里,就将它添加到列表中?

这是我的代码。

#include <iostream>
#include <array>
#include <utility>
#include <list>



using namespace std;

void check (pair<int, int> foo)
{
    int points[10000];

    cout << "x " <<foo.first;
    cout << "y "<< foo.second << endl;
}

int main()
{

int numberOfLines = 0;
string strDirection;
int counter = 0;
cin >> numberOfLines;

do
{
    counter++;
    int tempStrSize = 0;
    int y = 0;
    int x = 0;
    int intDirection = 0;

    cin >> strDirection;
    tempStrSize = strDirection.size();
    char direction[tempStrSize];
    pair<int, int> foo;
    for(int i = 0; i<tempStrSize; i++)
    {
        direction[i] = strDirection.at(i); 
    }
    for (int i = 0; i < tempStrSize; i++)
    {
        if(direction[i] == 'h' || direction[i] == 'H')
        {
            if(intDirection == 3)
            {
                intDirection = 0;
            }
            else if(intDirection != 3)
            {
                intDirection++;
            }
        }
        else if(direction[i] == 'v' || direction[i] == 'V')
        {
            if(intDirection == 0)
            {
                intDirection = 3;
            }
            else if(intDirection != 0)
            {
                intDirection--;
            }
        }
        else if(direction[i] == 'f' || direction[i] == 'F')
        {
            if(intDirection == 0)
            {
                y++;
                foo = make_pair(x,y);

            }
            if(intDirection == 1)
            {
                x++;
                foo = make_pair(x,y);

            }
            if(intDirection == 2)
            {
                y--;
                foo = make_pair(x,y);

            }
            if(intDirection == 3)
            {
                x--;
                foo = make_pair(x,y);

            }
        }
        check(foo);
    }
    cout << endl;
    cout << x << " " << y << endl;

}
while(counter < numberOfLines);
return 0;
}

1 个答案:

答案 0 :(得分:1)

我会使用Map或unordered_map:

#include <unordered_map>

unordered_map<pair<int, int>,bool> visitedPoints;

bool checkVisited(pair<int, int> &coords)
{
    return visitedPoints.find(coords) != visitedPoints.end();
}

void addVisited(pair<int, int> &coords)
{
    if(!checkVisited(coords)) visitedPoints[coords] = true;
}

只是检查一对是否在地图中并保存访问点。