是否有一个函数可以比较两个字符串向量,以返回不同(或相同)元素的数量?我是否必须对它们进行遍历并逐个测试?
plupiseo1#
// C++20std::ranges::sort(v1);std::ranges::sort(v2);std::vector<std::string> v3;std::ranges::set_intersection(v1, v2, std::back_inserter(v3));// any versionstd::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));
// C++20
std::ranges::sort(v1);
std::ranges::sort(v2);
std::vector<std::string> v3;
std::ranges::set_intersection(v1, v2, std::back_inserter(v3));
// any version
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<std::string> s1(v1.begin(), v1.end());std::set<std::string> s2(v2.begin(), v2.end());std::vector<std::string> v3;// C++20std::ranges::set_intersection(s1, s2, std::back_inserter(v3));// any versionstd::set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(), std::back_inserter(v3));
std::set<std::string> s1(v1.begin(), v1.end());
std::set<std::string> s2(v2.begin(), v2.end());
std::ranges::set_intersection(s1, s2, std::back_inserter(v3));
std::set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(), std::back_inserter(v3));
型如果向量中可能存在重复项,则可能需要使用多重集。
jm81lzqq2#
我不知道现有的函数,但自己写一个应该不会太麻烦。
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;}
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>
xa9qqrwz3#
看看set_difference()和set_intersection()。在这两种情况下,你都需要事先对容器进行排序。
ccgok5k54#
if (vector1 == vector2){ DoSomething();}
if (vector1 == vector2)
{
DoSomething();
字符串内容将根据以下链接文档从两个向量进行比较:比较两个向量的内容。1-2)检查lhs和rhs的内容是否相等,也就是说,它们具有相同数目的元素,并且lhs中的每个元素与rhs中相同位置的元素比较是否相等。https://en.cppreference.com/w/cpp/container/vector/operator_cmp
4条答案
按热度按时间plupiseo1#
字符串
或者,如果你不想排序:
型
如果向量中可能存在重复项,则可能需要使用多重集。
jm81lzqq2#
我不知道现有的函数,但自己写一个应该不会太麻烦。
字符串
注意到
std::
前缀vector<string>
示例,则需要更新此函数xa9qqrwz3#
看看set_difference()和set_intersection()。在这两种情况下,你都需要事先对容器进行排序。
ccgok5k54#
字符串
内容将根据以下链接文档从两个向量进行比较:
比较两个向量的内容。
1-2)检查lhs和rhs的内容是否相等,也就是说,它们具有相同数目的元素,并且lhs中的每个元素与rhs中相同位置的元素比较是否相等。
https://en.cppreference.com/w/cpp/container/vector/operator_cmp