c++ 我如何得到两个字符串向量之间的不同或共同元素的数量?

1sbrub3j  于 2024-01-09  发布在  其他
关注(0)|答案(4)|浏览(137)

是否有一个函数可以比较两个字符串向量,以返回不同(或相同)元素的数量?我是否必须对它们进行遍历并逐个测试?

plupiseo

plupiseo1#

  1. // C++20
  2. std::ranges::sort(v1);
  3. std::ranges::sort(v2);
  4. std::vector<std::string> v3;
  5. std::ranges::set_intersection(v1, v2, std::back_inserter(v3));
  6. // any version
  7. std::sort(v1.begin(), v1.end());
  8. std::sort(v2.begin(), v2.end());
  9. std::vector<string> v3;
  10. std::set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), std::back_inserter(v3));

字符串
或者,如果你不想排序:

  1. std::set<std::string> s1(v1.begin(), v1.end());
  2. std::set<std::string> s2(v2.begin(), v2.end());
  3. std::vector<std::string> v3;
  4. // C++20
  5. std::ranges::set_intersection(s1, s2, std::back_inserter(v3));
  6. // any version
  7. std::set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(), std::back_inserter(v3));


如果向量中可能存在重复项,则可能需要使用多重集。

展开查看全部
jm81lzqq

jm81lzqq2#

我不知道现有的函数,但自己写一个应该不会太麻烦。

  1. int compare(const vector<string>& left, const vector<string>& right) {
  2. auto leftIt = left.begin();
  3. auto rightIt = right.begin();
  4. auto diff = 0;
  5. while (leftIt != left.end() && rightIt != right.end()) {
  6. if (*leftIt != *rightIt) {
  7. diff++;
  8. }
  9. leftIt++;
  10. rightIt++;
  11. }
  12. // Account for different length vector instances
  13. if (0 == diff && (leftIt != left.end() || rightIt != right.end())) {
  14. diff = 1;
  15. }
  16. return diff;
  17. }

字符串
注意到

  • 为简洁起见,省略了std::前缀
  • 如果此函数应处理不同长度的vector<string>示例,则需要更新此函数
展开查看全部
xa9qqrwz

xa9qqrwz3#

看看set_difference()set_intersection()。在这两种情况下,你都需要事先对容器进行排序。

ccgok5k5

ccgok5k54#

  1. if (vector1 == vector2)
  2. {
  3. DoSomething();
  4. }

字符串
内容将根据以下链接文档从两个向量进行比较:
比较两个向量的内容。
1-2)检查lhs和rhs的内容是否相等,也就是说,它们具有相同数目的元素,并且lhs中的每个元素与rhs中相同位置的元素比较是否相等。
https://en.cppreference.com/w/cpp/container/vector/operator_cmp

相关问题