我可以用“==”来比较两个向量。 我试了一下,似乎是工作的罚款。 但我不知道是否会工作,更复杂

2019-09-02 03:58发布

第一个例子:

int main(){
    using namespace std;   
    vector<int> v1{10, 20, 30, 40, 50};
    vector<int> v2{10, 20, 30, 40, 50};

    if(v1==v2)
        cout<<"equal";
    else
        cout<<"unequal";
}   // it returns equal 

第二个例子:

int main(){
    using namespace std;   
    vector<int> v1{10, 20, 30, 40, 50};
    vector<int> v2{10, 20, 100000, 40, 50};

    if(v1==v2)
        cout<<"equal";
    else
        cout<<"unequal";
}   // it returns notequal 

Answer 1:

在过载operator == ,即对两个工程std::vector小号将比较向量大小和返回false ,如果这些是不同的; 如果没有,它将比较该向量元素按元素的内容。

如果operator ==为向量的元素类型,然后通过矢量的比较定义operator ==是有效的和有意义的。

在正式而言,C ++ 11标准规定的操作语义a == b为序列容器如(表96,第23.2.1):

==是等价关系。

distance(a.begin(), a.end()) == distance(b.begin(), b.end()) && equal(a.begin(), a.end(), b.begin())

正如可以看到,序列容器之间平等的方面被定义std::equal通过对迭代器,后者又使用定义的范围之间算法operator ==对于各个元件的比较。



Answer 2:

是的,你可以使用operator==来比较两个std::vector秒。 它将返回true只有在矢量相同的大小和所有的元素比较相等。



Answer 3:

注意,载体是有序的,并且std::equal==操作符检查矢量是相同的顺序相同的内容。 对于很多使用情况下,这可能是不够的。

但是,当你想知道,如果两个矢量具有相同的内容,但不一定以相同的顺序有可能是的场合。 对于这种情况,你需要其他功能。

一个很好的和短期的实现是下面的一个。 正是在这里建议: https://stackoverflow.com/questions/17394149/how-to-efficiently-compare-vectors-with-c/17394298#17394298在那里,你还可以找到为什么你可能不希望使用它的讨论...

把这个在您选择的头文件:

#include <algorithm>

template <class T>
static bool compareVectors(std::vector<T> a, std::vector<T> b)
{
   if (a.size() != b.size())
   {
      return false;
   }
   ::std::sort(a.begin(), a.end());
   ::std::sort(b.begin(), b.end());
   return (a == b);
}

这里一个例子说明上面的理论:

std::vector<int> vector1;
std::vector<int> vector2;

vector1.push_back(100);
vector1.push_back(101);
vector1.push_back(102);

vector2.push_back(102);
vector2.push_back(101);
vector2.push_back(100);

if (vector1 == vector2)
   std::cout << "same" << std::endl;
else
   std::cout << "not same" << std::endl;

if (std::equal(vector1.begin(), vector1.end(), vector2.begin()))
   std::cout << "same" << std::endl;
else
   std::cout << "not same" << std::endl;

if (compareVectors(vector1, vector2))
   std::cout << "same" << std::endl;
else
   std::cout << "not same" << std::endl;

输出将是:

not same
not same
same


Answer 4:

您可以查看的文档operator==矢量: !==操作符,=,<,<=,>,> =(标准::向量)

从链接引用:

 template< class T, class Alloc >
 bool operator==( vector<T,Alloc>& lhs,
             vector<T,Alloc>& rhs );

比较两个容器的内容。

如果LHS和rhs的内容检查是相等,即,lhs.size()== rhs.size()和在每个LHS元素是否具有在相同的位置在RHS等效元件。

参数:

LHS,RHS容器,其内容比较

T必须满足以使用版本相等性的要求

返回值

真,如果容器的内容是等价的,否则为false



Answer 5:

是。 一个很好的参考是cppreference.com ,在那里你可以看一下operator==vector<T>例如在本页面: 非会员运营商 ,你会发现:

如果LHS和rhs的内容检查是相等,即,lhs.size()== rhs.size()和在每个LHS元素是否具有在相同的位置在RHS等效元件。



Answer 6:

只要您的载体包含的元素,在自己可以比拟的(有operator== ),这个工作,是的。 但是请注意,如果你有一个包含例如指向同一对象的矢量,而不是一个对象的同一个实例,则该矢量不认为是相同的,因为在向量元素是什么相比,没有的内容元件作为这样,如果是有道理的。



文章来源: Can I use ' == ' to compare two vectors. I tried it and seems to be working fine. But I don't know whether it will work in more complex situations