如何获取两个字符串向量之间不同或共同元素的数量?

问题描述 投票:0回答:4

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

c++ std stdvector stdstring
4个回答
46
投票
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));

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


5
投票

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

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>
    不同长度的实例,则需要更新此函数

5
投票

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


2
投票
if (vector1 == vector2)
{
    DoSomething();
}

将按照以下链接文档比较两个向量的内容:

比较两个向量的内容。

1-2) 检查lhs和rhs的内容是否相等,即 具有相同数量的元素,并且 lhs 中的每个元素都进行比较 与 rhs 中相同位置的元素相等。

https://en.cppreference.com/w/cpp/container/vector/operator_cmp

© www.soinside.com 2019 - 2024. All rights reserved.