C ++ Проверка идентичных значений в 2 массивах - PullRequest
0 голосов
/ 18 сентября 2011

У меня есть 2 массива, называемых xVal, и yVal.

Я использую эти массивы в качестве координат.Я хочу убедиться, что массив не содержит 2 одинаковых набора координат.

Допустим, мои массивы выглядят так:

int xVal[4] = {1,1,3,4};
int yVal[4] = {1,1,5,4};

Здесь я хочу найтисоответствие между xVal[0] yVal[0] и xVal[1] yVal[1] как 2 одинаковых набора координат, называемых 1,1.

Я пробовал несколько разных вещей с forLoop, но я не могу заставить его работать какпредназначена.

Ответы [ 3 ]

2 голосов
/ 18 сентября 2011

Вы можете написать явный цикл, используя подход O (n ^ 2) (см. Ответ от x77aBs), или вы можете обменять некоторую память на производительность. Например, используя std::set

bool unique(std::vector<int>& x, std::vector<int>& y)
{
    std::set< std::pair<int, int> > seen;
    for (int i=0,n=x.size(); i<n; i++)
    {
        if (seen.insert(std::make_pair(x[i], y[i])).second == false)
            return false;
    }
    return true;
}
0 голосов
/ 18 сентября 2011
int identicalValueNum = 0;
int identicalIndices[4]; // 4 is the max. possible number of identical values
for (int i = 0; i < 4; i++)
{
    if (xVal[i] == yVal[i])
    {
        identicalIndices[identicalValueNum++] = i;
    }
}
for (int i = 0; i < identicalValueNum; i++)
{
    printf(
        "The %ith value in both arrays is the same and is: %i.\n",
        identicalIndices[i], xVal[i]);
}

Для

int xVal[4] = {1,1,3,4};
int yVal[4] = {1,1,5,4};

вывод printf будет:

0-е значение в обоих массивах одинаково и равно: 1.

1-е значение в обоих массивах одинаково и равно: 1.

3-е значение в обоих массивах одинаково и равно: 4.

0 голосов
/ 18 сентября 2011

Вы можете сделать это с двумя циклами:

int MAX=4; //number of elements in array
for (int i=0; i<MAX; i++)
{
    for (int j=i+1; j<MAX; j++)
    {
        if (xVal[i]==xVal[j] && yVal[i]==yVal[j])
        {
            //DUPLICATE ELEMENT at xVal[j], yVal[j]. Here you implement what
            //you want (maybe just set them to -1, or delete them and move everything
            //one position back)
        }
    }
}

Небольшое объяснение: первая переменная, я получаю значение 0. Чем вы зацикливаете j на всех возможных числах. Таким образом, вы сравниваете xVal [0] и yVal [0] со всеми другими значениями. j начинается с i + 1, потому что вам не нужно сравнивать значения перед i (они уже были сравнены).

Edit - вы должны написать небольшой класс, который будет представлять точку или, по крайней мере, структуру, и использовать std :: vector вместо массивов (легче удалить элемент в середине). Это должно облегчить вашу жизнь:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...