Zmienna x
jest wektorem n
ints i chcę posortować wektor w porządku rosnącym. Jednak z przyczyn nieobjętych zakresem tego pytania chcę, aby wektor pozostał nienaruszony. W związku z tym, zamiast faktycznie sortować zawartość x
, chcę utworzyć kolejny wektor z indeksów n
, gdzie każdy indeks odnosi się do odpowiedniej wartości w x
, jeśli zostały posortowane x
.Tworzenie wektora indeksów posortowanego wektora
Na przykład:
std::vector<int> x = {15, 3, 0, 20};
std::vector<int> y;
// Put the sorted indices of x into the vector y
for (int i = 0; i < 4; i++)
{
std::cout << y[i];
}
powinien dać wyjście:
2
1
0
3
odpowiadające wartościom w X:
0
3
15
20
mogę myśleć o wiele aktualnych sposobów realizacji tego , ale zastanawiam się, czy STL ma coś wbudowanego, aby wydajnie to dla mnie wykonać?
Myślę, że można użyć 'std: sort', dostarczając własny komparator, który przeprowadza dereferencję w celu' std :: vector' .. – Galik
Zobacz http://stackoverflow.com/questions/1577475/c-sorting i śledzenie indeksów – sfjac