Rumah > pembangunan bahagian belakang > C++ > Bagaimana Mengisih Berbilang Vektor Secara Konsisten Berdasarkan Vektor Rujukan?

Bagaimana Mengisih Berbilang Vektor Secara Konsisten Berdasarkan Vektor Rujukan?

Patricia Arquette
Lepaskan: 2024-12-14 15:50:11
asal
474 orang telah melayarinya

How to Sort Multiple Vectors Consistently Based on a Reference Vector?

Isih Vektor Berdasarkan Nilai daripada Vektor Lain

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());
Salin selepas log masuk

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;
}
Salin selepas log masuk

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);
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan