[英]Compare two vectors C++
我想知道是否有任何函数可以比较 2 个字符串向量以返回不同(或相同)元素的数量? 或者我必须遍历它们并逐项测试。
谢谢。
std::sort(v1.begin(), v1.end());
std::sort(v2.begin(), v2.end());
std::vector<string> v3;
std::set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), std::back_inserter(v3));
或者,如果您不想排序:
std::set<string> s1(v1.begin(), v1.end());
std::set<string> s2(v2.begin(), v2.end());
std::vector<string> v3;
std::set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(), std::back_inserter(v3));
如果向量中可能存在重复项,您可能需要使用多重集。
看看set_difference()和set_intersection() 。 在这两种情况下,您都需要事先对容器进行分类。
我不知道现有的函数,但自己编写一个函数应该不会太麻烦。
int compare(const vector<string>& left, const vector<string>& right) {
auto leftIt = left.begin();
auto rightIt = right.begin();
auto diff = 0;
while (leftIt != left.end() && rightIt != right.end()) {
if (*leftIt != *rightIt) {
diff++;
}
leftIt++;
rightIt++;
}
// Account for different length vector instances
if (0 == diff && (leftIt != left.end() || rightIt != right.end())) {
diff = 1;
}
return diff;
}
笔记
std::
前缀vector<string>
实例,则需要更新此函数if (vector1 == vector2)
{
DoSomething();
}
内容将根据以下链接文档从两个向量中进行比较:
比较两个向量的内容。
1-2) 检查lhs 和rhs 的内容是否相等,即它们的元素个数是否相同,并且lhs 中的每个元素与rhs 中相同位置的元素比较相等。
https://en.cppreference.com/w/cpp/container/vector/operator_cmp
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.