Załóżmy, że mam vector<int>
intVec
i vector<vector<double> >
matrix
. Chcę sortować intVec
i zmienić odpowiednio pierwszy wymiar matrix
w C++. Zdaję sobie sprawę, że to pytanie było już zadawane kilka razy wcześniej, ale ta sprawa ma pewien skręt. A vector<double>
jest drogi do skopiowania, np. kopiowanie zarówno intVec
, jak i kopiowanie ich z powrotem jest jeszcze bardziej nieefektywne niż zwykle.C++ Równoległe std :: Sortowanie wektorowe z kosztownym kopiowaniem
Krótki toczenia mój własny niestandardowy algorytm sortowania, w jaki sposób mogę zmienić kolejność sortowania intVec
i pierwszy wymiar matrix
w lockstep bez kopiowania jakiegokolwiek elementu matrix
i powołując vector
„s kopia konstruktora?
u teraz, rozwiązanie problemu cs to kolejna warstwa wskazanie pośrednie –
możliwym duplikatu [Jak sortować std :: vector przez wartości różnych std :: wektor?] (http://stackoverflow.com/questions/236172/how-do-i-sorta-a-stdvector-by-values-of-a-different-stdvector) –
Tak, jak mówi Alf , użyj innego sposobu przechowywania/dostępu do swojego wektora, aby nie trzeba było go kopiować - oczywiście własna funkcja nie rozwiąże problemu. Użycie 'wektora <* wektor >' na przykład zadziała [nadal możesz mieć normalny wektor > 'i po prostu zainicjować pierwszy wektor z adresami elementów w drugim. –