我可以使用' == '来比较两个向量吗?我试过了,似乎工作正常。但我不知道它是否适用于更复杂的情况
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
第一个例子:
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
在两个std::vector
上工作的operator ==
的过载将比较向量大小,如果它们不同则返回false
;如果不是,则逐个元素比较vector对象的内容。
如果为向量的元素类型定义了operator ==
,则通过operator ==
对向量的比较是有效且有意义的。
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 ==
来比较各个元素。
是的,您可以使用operator==
来比较两个std::vector
s。只有当向量大小相同且所有元素比较相等时,它才会返回true
。
建议向量是有序的,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
您可以查看operator==
文档中的vector: operator==,!=,<,<=,>,>=(std::vector)
引用自链接:
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必须满足EqualityComparable的要求才能使用版本
返回值如果容器的内容相等则为true,否则为false
是。一个很好的参考是cppreference.com,在那里你可以查找operator==
和vector<T>
,例如在这个页面:非成员操作符,你会发现:
检查lhs和rhs的内容是否相等,即是否LHS .size() == LHS .size(), LHS中的每个元素都有等号元素在RHS中的相同位置。
只要你的向量包含本身可以比较的元素(有operator==
),这是有效的,是的。但是,请注意,如果您有一个向量,其中包含例如指向相同对象的指针,但不是对象的相同实例,则该向量不被认为是相同的,因为要比较的是向量中的元素,而不是元素本身的内容(如果这有意义的话)。
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 我正在尝试使用 c++ 创建一个货币转换程序,我不知道如何继续
- 我不知道这条线是做什么的
- 如果我不知道每个列表中有多少个数字,我如何将给定数量的数字列表作为输入?
- 我不知道导致错误的原因 (C3074)
- 我不知道为什么这段代码会让核心被转储?
- 我正在尝试制作一个自平衡机器人,但编译时存在错误。我不知道如何解决它
- 我不知道如何使用代码块win32 gui
- 没有函数模板的实例与我不知道为什么的参数列表匹配
- if-else 语句仅按特定顺序工作,我不知道为什么
- DirectX 11 引擎在第三次代码改进后没有突然运行,我不知道为什么
- 程序输入名称和高度并显示它。我不知道如何显示列表中最高人的姓名和身高
- 函数抛出seg错误,我不知道为什么
- 我不知道为什么复制构造函数的调用在 c++ 中不稳定
- 我不知道它是如何工作的表[+1]?
- boost::asio http客户端停止工作,我不知道为什么
- 我不知道为什么我的数组不能正常工作
- 我可以使用' == '来比较两个向量吗?我试过了,似乎工作正常。但我不知道它是否适用于更复杂的情况
- 不同类型的指针之间的分配工作,我不知道为什么