有没有办法比较两个向量?
if (vector1 == vector2)
DoSomething();
Run Code Online (Sandbox Code Playgroud)
注意:目前,这些向量未排序并包含整数值.
sol*_*les 63
您的code(vector1 == vector2)是正确的C++语法.有一个==矢量运算符.
如果要将短向量与较长向量的一部分进行比较,可以使用equal()运算符作为向量.(这里的文件)
这是一个例子:
using namespace std;
if( equal(vector1.begin(), vector1.end(), vector2.begin()) )
DoSomething();
Run Code Online (Sandbox Code Playgroud)
Jha*_*iya 25
检查 std::mismatchC++的方法.
在DaniWeb论坛上讨论了比较向量并回答了问题.
检查以下SO帖子.会对你有所帮助.他们用不同的方法实现了同样的目标.
小智 5
根据此处的讨论,您可以使用直接比较两个向量
==
if (vector1 == vector2){
//true
}
else{
//false
}
Run Code Online (Sandbox Code Playgroud)
C ++ 11标准==为std::vector
其他人都提到这operator==确实比较矢量内容和作品,但这里是从报价C ++ 11 N3337标准草案,我相信暗示。
我们首先查看第 23.2.1 章“一般容器要求”,其中记录了必须对所有容器有效的内容,包括因此std::vector。
表 96“容器要求”部分包含一个条目:
Run Code Online (Sandbox Code Playgroud)Expression Operational semantics =========== ====================== a == b distance(a.begin(), a.end()) == distance(b.begin(), b.end()) && equal(a.begin(), a.end(), b.begin())
该distance语义意味着两个容器的大小是相同的,但在非随机寻址容器广义迭代器友好的方式陈述的一部分。distance()在 24.4.4“迭代器操作”中定义。
那么关键问题是什么equal()意思。在表的末尾,我们看到:
注意:算法 equal() 在第 25 条中定义。
在第 25.2.11 节“相等”中,我们找到了它的定义:
Run Code Online (Sandbox Code Playgroud)template<class InputIterator1, class InputIterator2> bool equal(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2); template<class InputIterator1, class InputIterator2, class BinaryPredicate> bool equal(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, BinaryPredicate pred);1 返回: 如果对于范围内
[first1,last1)的每个迭代器 i 都满足以下相应条件*i == *(first2 + (i - first1)),则为 true :,pred(*i, *(first2 + (i - first1))) != false。否则,返回假。
在我们的例子中,我们关心没有BinaryPredicate版本的重载版本,它对应于第一个伪代码定义*i == *(first2 + (i - first1)),我们看到它只是“所有迭代项都相同”的迭代器友好定义。
其他容器的类似问题: