开发者

Compare two vectors C++

开发者 https://www.devze.com 2023-02-15 04:29 出处:网络
I was wondering is there any function to compare 2 string vectors to return the 开发者_如何学运维number of different(or the same) elements? Or i have to iterate over both of them and test item by item

I was wondering is there any function to compare 2 string vectors to return the 开发者_如何学运维number of different(or the same) elements? Or i have to iterate over both of them and test item by item.

Thanks.


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));

Or, if you don't want to sort:

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));

You may want to use a multiset if there could be duplicates in a vector.


I don't know of an existing function but writing one yourself shouldn't be too much trouble.

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;
}

Notes

  • Omitted std:: prefix for brevity
  • This function needs to be updated if it should handle vector<string> instances of different lengths


Have a look at set_difference() and set_intersection(). In both cases you need to have your containers sorted beforehand.


if (vector1 == vector2)
{
    DoSomething();
}

The content will be compared from both vectors as per the below link documentation:

Compares the contents of two vectors.

1-2) Checks if the contents of lhs and rhs are equal, that is, they have the same number of elements and each element in lhs compares equal with the element in rhs at the same position.

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

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号