有没有办法比较两个向量?
if (vector1 == vector2) DoSomething();
if (vector1 == vector2)
DoSomething();
字符串
**注意:**目前这些向量没有排序,包含整数值。
z4iuyo4d1#
你的代码(vector1 == vector2)是正确的C++语法。向量有一个==运算符。如果你想比较短向量和长向量的一部分,你可以对向量使用equal()运算符。(documentation here)下面是一个示例:
vector1 == vector2
==
equal()
using namespace std;if( equal(vector1.begin(), vector1.end(), vector2.begin()) ) DoSomething();
using namespace std;
if( equal(vector1.begin(), vector1.end(), vector2.begin()) )
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?的
std::mismatch
rpppsulh3#
std::vector的==上的C++11标准
std::vector
其他have mentioned,operator==确实比较矢量内容和作品,但这里是一个引用的C++11 N3337 standard draft,我相信这意味着。我们首先看一下第23.2.1章“一般容器要求”,它记录了必须对 * 所有 * 容器有效的东西,因此包括std::vector。表96“集装箱要求”一节包含以下条目:
operator==
Expression Operational semantics=========== ======================a == b distance(a.begin(), a.end()) == distance(b.begin(), b.end()) && equal(a.begin(), a.end(), b.begin())
Expression Operational semantics
=========== ======================
a == b distance(a.begin(), a.end()) == distance(b.begin(), b.end()) &&
equal(a.begin(), a.end(), b.begin())
字符串语义的distance部分意味着两个容器的大小是相同的,但是对于非随机访问可寻址容器,以广义迭代器友好的方式声明。那么关键的问题是equal()是什么意思。在表格的末尾我们可以看到:注:算法equal()在第25章中定义。在第25.2.11节“平等”中,我们找到了其定义:
distance
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);
template<class InputIterator1, class InputIterator2>
bool equal(InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2);
template<class InputIterator1, class InputIterator2,
class BinaryPredicate>
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)),我们看到它只是一个迭代器友好的定义“所有迭代的项都相同”。其他容器的类似问题:
[first1,last1)
*i == *(first2 + (i - first1))
pred(*i, *(first2 + (i - first1))) != false
BinaryPredicate
cld4siwp4#
if (vector1 == vector2){ //true}else{ //false}
if (vector1 == vector2){
//true
}
else{
//false
hgtggwj05#
如果它们真的绝对必须保持未排序(它们真的不需要..如果你处理成千上万的元素,那么我必须问你为什么要像这样比较向量),你可以组合一个比较方法,它适用于未排序的数组。我想到的唯一方法是创建一个临时的vector3,然后假装做一个set_intersection,将vector1的所有元素添加到它,然后在vector3中搜索vector2的每个元素,如果找到就删除它。我知道这听起来很可怕,但这就是为什么我不会很快编写任何C++标准库的原因。不过,真的,先把它们分类。
vector3
set_intersection
vector1
vector2
5条答案
按热度按时间z4iuyo4d1#
你的代码(
vector1 == vector2
)是正确的C++语法。向量有一个==
运算符。如果你想比较短向量和长向量的一部分,你可以对向量使用
equal()
运算符。(documentation here)下面是一个示例:
字符串
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?的
rpppsulh3#
std::vector
的==
上的C++11标准其他have mentioned,
operator==
确实比较矢量内容和作品,但这里是一个引用的C++11 N3337 standard draft,我相信这意味着。我们首先看一下第23.2.1章“一般容器要求”,它记录了必须对 * 所有 * 容器有效的东西,因此包括
std::vector
。表96“集装箱要求”一节包含以下条目:
字符串
语义的
distance
部分意味着两个容器的大小是相同的,但是对于非随机访问可寻址容器,以广义迭代器友好的方式声明。那么关键的问题是
equal()
是什么意思。在表格的末尾我们可以看到:注:算法equal()在第25章中定义。
在第25.2.11节“平等”中,我们找到了其定义:
型
1退货:如果对于
[first1,last1)
范围内的每个迭代器i,以下相应条件成立:*i == *(first2 + (i - first1))
,pred(*i, *(first2 + (i - first1))) != false
,则返回true。否则,返回false。在我们的例子中,我们关心的是没有
BinaryPredicate
版本的重载版本,它对应于第一个伪代码定义*i == *(first2 + (i - first1))
,我们看到它只是一个迭代器友好的定义“所有迭代的项都相同”。其他容器的类似问题:
cld4siwp4#
根据讨论here,您可以使用以下命令直接比较两个向量:
字符串
hgtggwj05#
如果它们真的绝对必须保持未排序(它们真的不需要..如果你处理成千上万的元素,那么我必须问你为什么要像这样比较向量),你可以组合一个比较方法,它适用于未排序的数组。
我想到的唯一方法是创建一个临时的
vector3
,然后假装做一个set_intersection
,将vector1
的所有元素添加到它,然后在vector3
中搜索vector2
的每个元素,如果找到就删除它。我知道这听起来很可怕,但这就是为什么我不会很快编写任何C++标准库的原因。不过,真的,先把它们分类。