2014-10-30 2 views
0

Как сравнить два вектора? Оба cointains целых значений:Как сравнить вектор?

void interaction(vehicles::position &pos, int number, enviroment object) 
{ 
    for (auto i = object.x.begin(); i<object.x.end(); i++) 
     for (auto j = object.y.begin(); j<object.y.end(); j++) 
      if (pos.x[number] == object.x[i] && pos.y[number] == object.y[j]) 
       cout << "\nInteraction\n"; 
} 

Первый вектор (объявленных в классе):

int remaining_move; 
    struct position{ 
     vector<int> x; 
     vector<int> y; 
    }pos; 

Вторых:

struct enviroment 
{ 
    vector<int> x; 
    vector<int> y; 
    string graphic; 
}; 

Ошибка: errors

+4

Просьба воспроизвести текст ошибки в вопросе, а не размещать снимок экрана. –

+1

Сортируйте векторы, а затем вызовите '==': 'std :: sort (a.begin(), a, end()); std :: sort (b.begin(), b.end()); return a == b; ' –

+0

@ πάνταῥεῖ Вопрос в том, как сравнить эти два вектора? Я помещал эти ошибки только в иллюстрацию, где проблема. – Kulis

ответ

6
object.x[i] 

Это неправильно. Он работал бы, если i был числовым индексом, но это не так: это итератор.

Вместо:

*i 

Я поэтому далее предлагаю называть это нечто иное, чем i; как насчет it?

Кроме того, ваше внутреннее состояние цикла неверно. Вы писали: i, а не j. Дважды. [править: и теперь вы исправили, что в этом вопросе, по какой-то причине]

2

Я рекомендовал бы их сортировки во-первых, так вот как я это сделаю:

std::sort(v1.begin(), v1.end()); 
std::sort(v2.begin(), v2.end()); 
std::vector<int> v3; 
std::set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), std::back_inserter(v3)); 
2

Если вы просто ищете pos.x[number] и pos.y[number] в object.x и object.y, соответственно, почему бы не просто:

auto itX = std::find(object.x.begin(), object.x.end(), pos.x[number]); 
auto itY = std::find(object.y.begin(), object.y.end(), pos.y[number]); 

if (itX != object.x.end() && itY != object.y.end()) { 
    std::cout << "\nInteraction\n"; 
} 
1

Для сравнения один векторный элемент, сравнивать значение в пазах:

std::vector<int> a; 
std::vector<int> b; 
//... 
if (a[0] == b[0]) 
{ 
    // elements are equal 
} 

Далее элементы могут быть сопоставлены с помощью цикла:

for (unsigned int i = 0; i < a.size(); ++i) 
    { 
    if (a[i] != b[i]) 
    { 
     break; 
    } 
    } 

Один из шипов, когда векторы имеют разные размеры. Вам нужно будет решить, какие действия вы делаете по этой теме.

Есть, вероятно, некоторые алгоритмы в <algorithm>, которые вы можете использовать на векторе.

Смежные вопросы