Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Menyusun Berbilang Vektor Serentak dalam C Sambil Memelihara Surat-menyurat?

Bagaimana untuk Menyusun Berbilang Vektor Serentak dalam C Sambil Memelihara Surat-menyurat?

Susan Sarandon
Lepaskan: 2024-12-05 07:59:12
asal
958 orang telah melayarinya

How to Efficiently Sort Multiple Vectors Simultaneously in C   While Preserving Correspondence?

Isih Bekas Berzip (Berkunci) dalam C Menggunakan Boost atau STL

Pengenalan

Tugas menyusun berbilang serentak vektor sambil mengekalkan korespondensi antara elemen mereka adalah cabaran biasa dalam pengaturcaraan. Artikel ini meneroka penyelesaian kepada masalah ini menggunakan sama ada perpustakaan Boost atau Perpustakaan Templat Standard (STL).

Pendekatan Standard

Pendekatan standard melibatkan pengekstrakan nilai daripada vektor ke dalam struktur data komposit, seperti tuple atau struct. Pendekatan ini, walau bagaimanapun, memerlukan penyalinan data, yang boleh menjadi tidak cekap.

Boost Solution

Boost menyediakan rangsangan::zip_iterator dan boost::zip_range yang membolehkan penciptaan iterator yang melintasi berbilang bekas secara selari. Walau bagaimanapun, iterator ini adalah baca sahaja dan bukan akses rawak, yang mengehadkan penggunaannya dengan algoritma pengisihan standard.

Penyelesaian Julat-v3

Satu penyelesaian ialah menggunakan perpustakaan julat-v3. Fungsi view::zip mencipta paparan yang berulang pada berbilang bekas secara selari. Paparan ini membenarkan pengisihan menggunakan fungsi julat::sort.

#include <range/v3/all.hpp>
#include <iostream>

int main() {
    std::vector<int> v1 = {15, 7, 3, 5};
    std::vector<int> v2 = {1, 2, 6, 21};

    ranges::sort(ranges::view::zip(v1, v2), std::less<>{}, &std::pair<int, int>::first);

    std::cout << ranges::view::all(v1) << '\n';
    std::cout << ranges::view::all(v2) << '\n';

    return 0;
}
Salin selepas log masuk

Kod ini menunjukkan cara mengisih dua vektor secara serentak sambil mengekalkan kesesuaian elemen. Hasil yang diisih dicetak ke konsol.

Pertimbangan Masa Depan

Walaupun pendekatan ini berfungsi dengan baik untuk jujukan, melanjutkannya untuk menyokong jenis bekas lain, seperti senarai, memerlukan iterator capaian dua hala dan rawak. Pada masa ini, fungsi std::sort STL tidak menyokong iterator dwiarah.

Atas ialah kandungan terperinci Bagaimana untuk Menyusun Berbilang Vektor Serentak dalam C Sambil Memelihara Surat-menyurat?. 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