Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menyusun Satu `std::vector` Berdasarkan Susunan Satu Lagi?

Bagaimana untuk Menyusun Satu `std::vector` Berdasarkan Susunan Satu Lagi?

DDD
DDDasal
2024-12-07 12:16:13725semak imbas

How to Sort One `std::vector` Based on the Order of Another?

Mengisih std::vector mengikut Values ​​of a Different std::vector

Masalah ini melibatkan penjajaran susunan vektor dengan susunan vektor lain. Sebagai contoh, Indeks vektor mengandungi nombor [3, 1, 2] dan Nilai vektor mengandungi rentetan "Ketiga, Pertama, Kedua." Isih Indeks dalam tertib menaik ([1, 2, 3]) seharusnya menyebabkan Nilai diisih dalam susunan yang sepadan (["Pertama", "Kedua", "Ketiga"]).

Penyelesaian :

Pendekatan biasa melibatkan mencipta susunan vektor dengan menggabungkan indeks daripada Indeks dan elemen sepadannya daripada Nilai. Vektor ini kemudiannya boleh diisih menggunakan pembanding tersuai yang membandingkan elemen dalam Indeks:

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&amp; a, pair<size_t, myiter> const&amp; b) {
        return *(a.second) < *(b.second);
    }
};

sort(order.begin(), order.end(), ordering());

Vektor pesanan yang terhasil kini mengandungi indeks yang diisih. Untuk menggunakan tertib ini pada Nilai, fungsi berikut boleh digunakan:

template <typename T>
vector<T> sort_from_ref(
    vector<T> const&amp; in,
    vector<pair<size_t, myiter>> const&amp; 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;
}

Values = sort_from_ref(Values, order);

Fungsi ini membawa masuk vektor asal dan vektor rujukan yang mengandungi indeks yang diisih dan mengembalikan salinan dalam yang diisih sewajarnya.

Atas ialah kandungan terperinci Bagaimana untuk Menyusun Satu `std::vector` Berdasarkan Susunan Satu Lagi?. 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