Suppongo di avere un vector<int>
intVec
e uno vector<vector<double> >
matrix
. Voglio ordinare intVec
e riordinare la prima dimensione di matrix
corrispondentemente in C++. Mi rendo conto che questa domanda è stata posta diverse volte prima, ma questo caso ha una svolta. Un vector<double>
è costoso da copiare, quindi ad es. copiare sia intVec
sia matrix
in un vector<pair<int, vector<double> >
, ordinarlo e copiarli è ancora più inefficiente del solito.C++ Parallel std :: vector Sorting With Expensive Copying
A corto di rotazione mia algoritmo di ordinamento personalizzato, come posso sorta intVec
e riordinare la prima dimensione di matrix
in sincronia senza copiare alcun elemento di matrix
e invocando vector
's copiare costruttore?
u ora, la soluzione a qualsiasi problema cs è un altro livello di riferimento indiretto –
possibile duplicato di [Come si ordina uno std :: vector dai valori di uno std diverso :: vector?] (http://stackoverflow.com/questions/236172/how-do-i-sort-a-stdvector-by-the-values-of-a-different-stdvector) –
Sì, come Alf dice , usa un modo diverso di memorizzare/accedere al tuo vettore, in modo che non sia necessario copiarlo: la rotazione della tua funzione ovviamente non risolverà il problema. Usando un 'vector <* vector >' per esempio funzionerà [puoi ancora avere un normale 'vector >' e solo inizializzare il primo vettore con gli indirizzi degli elementi nella seconda. –