如何比较矢量?

时间:2014-10-30 19:51:06

标签: c++ vector

如何比较两个向量?两者都包含整数值:

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 个答案:

答案 0 :(得分:6)

object.x[i] 

这是错误的。如果i是一个数字索引,它会起作用,但它不是:它是一个迭代器。

相反:

*i

因此,我进一步建议将其称为i之外的其他内容; it怎么样?

另外,你的内循环条件是错误的。您写了i,而不是j。两次。 [编辑:现在你已经解决了问题,出于某种原因]

答案 1 :(得分: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 :(得分:2)

如果您只是分别在pos.x[number]pos.y[number]中寻找object.xobject.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";
}

答案 3 :(得分: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>中可能存在一些可以在矢量上使用的算法。