Ich habe versucht, ein Problem der Sortierung paralleler Vektoren zu lösen (d. H. Vektoren, die für jeden Index ein Attribut derselben Entität enthalten). Ich habe mehrere Vektoren und muss sie mit einem der Werte dieser Vektoren als Schlüssel sortieren. Der häufige Weg, dies in Rost zu tun, besteht darin, einen Vektor von Tupeln zuzuweisen, ihn nach einem seiner Felder zu sortieren und ihn wieder in Vektoren zu entpacken. Das Wort, das ich hier nicht mag, ist "Zuteilung".
Ich möchte nur den Referenzvektor an Ort und Stelle sortieren und für jeden Element-Swap in allen anderen Vektoren denselben Tausch durchführen. Kurz gesagt, der Code sieht folgendermaßen aus: < /p>
Code: Select all
std::vector keys { 1, 4, 3, 0, 2, 8, 6, 5, 7, 9 };
std::vector values {'E', 'O', 'L', 'H', 'L', 'L', 'O', 'W', 'R', 'D'};
auto zip = std::ranges::views::zip(keys, values);
std::ranges::sort(zip, [](const auto & lhs, const auto & rhs) {
return std::get(lhs) < std::get(rhs);
});
Es sortiert Werte Verwenden von Schlüssel als Referenz. Wie ich verstehe, tut dieser Code genau das, was ich will. Bin ich richtig? Und wenn ich das bin, wie würde ich das in Rost machen?