C ++ обменивается вектором между двумя векторами векторов - PullRequest
0 голосов
/ 24 января 2020

У меня есть 2 вектора вектора для структуры, скажем, A.

Если вы рассматриваете их как матрицу A, число строк в обеих матрицах будет одинаковым, но каждая строка имеет разную длину, поэтому это не идеальная матрица.

На основе вычисленного показателя c строка одного вектора копируется в другой.

Например:

#include <vector>
struct A {
  int a;
  int b;
};

std::vector<double> computeMetric(std::vector<std::vector<A>> v) {
  std::vector<double> temp(v.size(), 0);

  for (size_t i = 0; i < v.size(); i++) {
    for (size_t j = 0; j < v[i].size(); j++) {
      temp[i] += v[i][j].a / v[i][j].b;
    }
  }
  return temp;
}

int main() {
  std::vector<std::vector<A>> v1;
  std::vector<std::vector<A>> v2;

  std::vector<double> metricV1 =
      computeMetric(v1); // size() = V1.size() = v2.size()
  std::vector<double> metricV2 =
      computeMetric(v2); // size() = V1.size() = v2.size()

  for (size_t i = 0; i < metricV1.size(); i++) {
    if (metricV1[i] > metricV2[i])
      v1[i] = v2[i];
  }
  return 0;
}

но v1[i] = v2[i]; не правильно, и поэтому я использовал erase() и insert().

Будут ли результаты ожидаемыми, и это более эффективный способ сделать это?

1 Ответ

1 голос
/ 24 января 2020

после исследования есть ссылка в документации по c ++, которую вы можете найти здесь

Вы можете использовать std::vector::swap()., и это наиболее эффективный способ замены двух векторов. Вот пример замены

// CPP program to illustrate swapping  
// of two vectors using std::vector::swap() 

#include<bits/stdc++.h> 
using namespace std; 

int main() 
{ 
    vector<int> v1 = {1, 2, 3}; 
    vector<int> v2 = {4, 5, 6}; 

    // swapping the above two vectors 
    // using std::vector::swap 
    v1.swap(v2); 

    // print vector v1 
    cout<<"Vector v1 = "; 
    for(int i=0; i<3; i++) 
    { 
        cout<<v1[i]<<" "; 
    } 

    // print vector v2 
    cout<<"\nVector v2 = "; 
    for(int i=0; i<3; i++) 
    { 
        cout<<v2[i]<<" "; 
    } 

    return 0; 
} 

, поэтому использование std::swap() является наиболее эффективным способом обмена вектором между двумя векторами векторов

...