我想知道是否有比较两个字符串向量并返回不同(或相同)元素数量的函数?还是我必须逐个迭代它们并测试每个项目。
谢谢。
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));
如果向量中可能存在重复元素,您可能希望使用multiset。
std::sort
,你需要确保 v1 和 v2 不是 const
,并且实现了 operator<
,这在所有情况下都无法保证。 - jaques-sam我不知道是否存在这样的功能,但编写一个并不会太麻烦。
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>
实例,则需要更新此函数vector<string>
实现合并为一个吗?我认为count_if
只能在单个迭代器范围上操作。虽然谓词可以是一个改变第二个迭代器的lambda函数,但感觉不太对。 - JaredParif (vector1 == vector2)
{
DoSomething();
}
链接: https://en.cppreference.com/w/cpp/container/vector/operator_cmp比较两个向量的内容。
1-2)检查lhs和rhs的内容是否相等,即它们具有相同数量的元素,并且lhs中的每个元素与rhs中相同位置的元素相等。
vector
支持 ==
和 <
类型比较。 - Andrew
std::count_if
和std::for_each
。 - AJG85