Isih Vektor Berdasarkan Nilai daripada Vektor Berbeza
Pertimbangkan senario di mana anda mempunyai berbilang vektor yang sama panjang dan anda mahu susun satu vektor mengikut susunan tertentu sambil menggunakan pilih atur yang sama kepada vektor lain. Ini menimbulkan cabaran tentang cara memanfaatkan corak pengisihan ini merentas berbilang vektor.
Penyelesaian
Untuk mengisih vektor mengikut nilai daripada vektor yang berbeza, anda boleh menggunakan tersuai menyusun dan menggunakan vektor yang menggandingkan setiap indeks elemen dengan nilai yang sepadan dalam vektor pengisihan.
typedef vector<int>::const_iterator myiter; vector<pair<size_t, myiter>> order(Index.size()); size_t n = 0; for (myiter it = Index.begin(); it != Index.end(); ++it, ++n) order[n] = make_pair(n, it); struct ordering { bool operator ()(pair<size_t, myiter> const& a, pair<size_t, myiter> const& b) { return *(a.second) < *(b.second); } }; sort(order.begin(), order.end(), ordering());
Sebaik sahaja anda mempunyai susunan yang diisih, anda boleh menggunakan ini sebagai jadual carian untuk indeks baharu setiap elemen dalam vektor lain.
template <typename T> vector<T> sort_from_ref( vector<T> const& in, vector<pair<size_t, myiter>> const& reference ) { vector<T> ret(in.size()); size_t const size = in.size(); for (size_t i = 0; i < size; ++i) ret[i] = in[reference[i].first]; return ret; }
Dengan menggunakan proses ini, anda boleh mengisih vektor sasaran dengan berkesan dan menggunakan transformasi yang sama kepada elemen yang sepadan dalam vektor lain.
Atas ialah kandungan terperinci Bagaimana Mengisih Berbilang Vektor Berdasarkan Nilai Vektor Tunggal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!