Pertimbangkan senario di mana anda mempunyai berbilang vektor yang sama panjang dan perlu mengisih salah satu vektor sambil mengekalkan yang sama menyusun tertib merentas semua vektor lain. Ini mungkin berguna apabila nilai yang diisih berfungsi sebagai rujukan untuk elemen dalam vektor lain.
Dalam coretan kod yang disediakan, kami mempunyai dua vektor: Indeks dan Nilai. Indeks mengandungi integer yang menandakan susunan pengisihan yang diingini, dan Nilai mengandungi rentetan yang akan diisih sewajarnya.
Salah satu pendekatan ialah mencipta vektor pasangan yang menggabungkan unsur Indeks dan Nilai, kemudian mengisih vektor ini menggunakan pembanding tersuai. Begini cara anda melakukannya:
using myiter = std::vector<int>::const_iterator; std::vector<std::pair<size_t, myiter>> order(Index.size()); size_t n = 0; for (const auto& it : Index) { order[n++] = std::make_pair(n, it); } struct ordering { bool operator()(const std::pair<size_t, myiter>& a, const std::pair<size_t, myiter>& b) { return *a.second < *b.second; } }; std::sort(order.begin(), order.end(), ordering());
Vektor pesanan kini mengandungi elemen daripada Indeks dan Nilai dalam susunan yang diisih. Anda boleh menggunakan ini untuk mengisih vektor lain juga. Berikut ialah templat fungsi yang melakukan perkara itu:
template <typename T> std::vector<T> sort_from_ref( const std::vector<T>& in, const std::vector<std::pair<size_t, myiter>>& reference ) { std::vector<T> ret(in.size()); size_t size = in.size(); for (size_t i = 0; i < size; ++i) ret[i] = in[reference[i].first]; return ret; }
Menggunakan fungsi ini, anda kini boleh mendapatkan versi Isih Nilai berdasarkan susunan yang ditentukan oleh Indeks:
std::vector<std::string> sortedValues = sort_from_ref(Values, order);
Pendekatan ini membenarkan anda untuk mengisih berbilang vektor dengan cekap dengan cara yang konsisten tanpa memerlukan penyelesaian yang kompleks dan berulang.
Atas ialah kandungan terperinci Bagaimana Mengisih Berbilang Vektor Secara Konsisten Berdasarkan Vektor Rujukan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!