Rumah >pembangunan bahagian belakang >C++ >Bagaimana Mengisih Berbilang Vektor Berdasarkan Nilai Vektor Tunggal?

Bagaimana Mengisih Berbilang Vektor Berdasarkan Nilai Vektor Tunggal?

Susan Sarandon
Susan Sarandonasal
2024-12-29 20:04:14700semak imbas

How to Sort Multiple Vectors Based on the Values of a Single Vector?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn