Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Isih Berbilang Vektor dalam C Sambil Mengekalkan Penyegerakan Menggunakan Julat-v3?

Bagaimanakah Saya Boleh Isih Berbilang Vektor dalam C Sambil Mengekalkan Penyegerakan Menggunakan Julat-v3?

Susan Sarandon
Susan Sarandonasal
2024-12-11 12:31:10961semak imbas

How Can I Sort Multiple Vectors in C   While Maintaining Synchronization Using Range-v3?

Isih Bekas Berzip Berkunci dalam C Menggunakan Julat-v3

Cabaran

Tugas di tangan melibatkan pengisihan berbilang vektor, atau bekas, sambil mengekalkan susunan segeraknya. Sebaik-baiknya, pengisihan ini harus berlaku tanpa menyalin bekas ke dalam tuple atau struct.

Penyelesaian Range-v3

Range-v3, perpustakaan C moden, menyediakan kemudahan pendekatan kepada masalah ini. Contoh berikut menunjukkan cara mengisih bekas berzip menggunakan ciri luasnya:

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

using namespace ranges;

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

    // Zip and sort the containers
    sort(view::zip(a1, a2), std::less< std::pair<int, int> >{}, &std::pair<int, int>::first); 

    // Print the sorted vectors
    std::cout << view::all(a1) << '\n';
    std::cout << view::all(a2) << '\n';
}

Contoh Langsung

Penjelasan

  1. Fungsi julat::view::zip digunakan untuk mencipta paparan berzip bagi bekas, memberikan akses kepada elemennya dalam cara disegerakkan.
  2. Fungsi std::sort digunakan pada paparan berzip, menggunakan operator std::less untuk menentukan pesanan. Parameter &std::pair::first menentukan bahawa pengisihan harus dilakukan berdasarkan elemen pertama setiap pasangan dalam paparan berzip, yang sepadan dengan vektor pertama.
  3. Dengan mengubah suai vektor asal secara langsung, pendekatan ini mengelakkan penyalinan yang tidak perlu data.

Kesimpulan

Penyelesaian Julat-v3 ini menyediakan cara yang elegan dan cekap untuk mengisih berbilang bekas berkunci sambil mengekalkan susunan segeraknya. Ia menyerlahkan kuasa Range-v3 untuk menyelesaikan cabaran manipulasi data yang kompleks dalam C .

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Isih Berbilang Vektor dalam C Sambil Mengekalkan Penyegerakan Menggunakan Julat-v3?. 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