c++ 如何比较两个向量的相等元素的元素?

inb24sb2  于 2024-01-09  发布在  其他
关注(0)|答案(5)|浏览(244)

有没有办法比较两个向量?

  1. if (vector1 == vector2)
  2. DoSomething();

字符串

**注意:**目前这些向量没有排序,包含整数值。

z4iuyo4d

z4iuyo4d1#

你的代码(vector1 == vector2)是正确的C++语法。向量有一个==运算符。
如果你想比较短向量和长向量的一部分,你可以对向量使用equal()运算符。(documentation here
下面是一个示例:

  1. using namespace std;
  2. if( equal(vector1.begin(), vector1.end(), vector2.begin()) )
  3. DoSomething();

字符串

vsnjm48y

vsnjm48y2#

查看C++的std::mismatch方法。
比较向量已经在DaniWeb论坛上讨论过,也有回答
C++: Comparing two vectors
看看下面的SO帖子。它会对你有帮助。他们用两种不同的方法实现了同样的目标。
How do I get the number of different or common elements between two vectors of strings?

rpppsulh

rpppsulh3#

std::vector==上的C++11标准

其他have mentionedoperator==确实比较矢量内容和作品,但这里是一个引用的C++11 N3337 standard draft,我相信这意味着。
我们首先看一下第23.2.1章“一般容器要求”,它记录了必须对 * 所有 * 容器有效的东西,因此包括std::vector
表96“集装箱要求”一节包含以下条目:

  1. Expression Operational semantics
  2. =========== ======================
  3. a == b distance(a.begin(), a.end()) == distance(b.begin(), b.end()) &&
  4. equal(a.begin(), a.end(), b.begin())

字符串
语义的distance部分意味着两个容器的大小是相同的,但是对于非随机访问可寻址容器,以广义迭代器友好的方式声明。
那么关键的问题是equal()是什么意思。在表格的末尾我们可以看到:
注:算法equal()在第25章中定义。
在第25.2.11节“平等”中,我们找到了其定义:

  1. template<class InputIterator1, class InputIterator2>
  2. bool equal(InputIterator1 first1, InputIterator1 last1,
  3. InputIterator2 first2);
  4. template<class InputIterator1, class InputIterator2,
  5. class BinaryPredicate>
  6. bool equal(InputIterator1 first1, InputIterator1 last1,
  7. InputIterator2 first2, BinaryPredicate pred);


1退货:如果对于[first1,last1)范围内的每个迭代器i,以下相应条件成立:*i == *(first2 + (i - first1))pred(*i, *(first2 + (i - first1))) != false,则返回true。否则,返回false。
在我们的例子中,我们关心的是没有BinaryPredicate版本的重载版本,它对应于第一个伪代码定义*i == *(first2 + (i - first1)),我们看到它只是一个迭代器友好的定义“所有迭代的项都相同”。
其他容器的类似问题:

展开查看全部
cld4siwp

cld4siwp4#

根据讨论here,您可以使用以下命令直接比较两个向量:

  1. if (vector1 == vector2){
  2. //true
  3. }
  4. else{
  5. //false
  6. }

字符串

hgtggwj0

hgtggwj05#

如果它们真的绝对必须保持未排序(它们真的不需要..如果你处理成千上万的元素,那么我必须问你为什么要像这样比较向量),你可以组合一个比较方法,它适用于未排序的数组。
我想到的唯一方法是创建一个临时的vector3,然后假装做一个set_intersection,将vector1的所有元素添加到它,然后在vector3中搜索vector2的每个元素,如果找到就删除它。我知道这听起来很可怕,但这就是为什么我不会很快编写任何C++标准库的原因。
不过,真的,先把它们分类。

相关问题