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; }
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!