Mengoptimumkan Pemadaman Pendua dan Isih dalam Vektor
Dalam C , vektor ialah struktur data biasa untuk menyimpan elemen. Walau bagaimanapun, menguruskan vektor besar dengan cekap dengan pendua dan keperluan pengisihan boleh menjadi mencabar.
Pendekatan Tidak Cekap
Coretan kod menyediakan percubaan untuk memadamkan pendua dan mengisih vektor menggunakan std: : unik dan std::sort:
vec.erase( std::unique(vec.begin(), vec.end()), vec.end()); std::sort(vec.begin(), vec.end());
Walau bagaimanapun, pendekatan ini gagal mengalih keluar pendua dengan betul.
Pendekatan Pilihan
Terdapat beberapa pendekatan alternatif yang menawarkan prestasi yang lebih baik:
1. Menggunakan std::set
Set std::set ialah bekas yang secara automatik mengekalkan set elemen yang disusun dan unik. Menukar vektor kepada set boleh mengalih keluar pendua dengan cekap:
std::set<int> s(vec.begin(), vec.end());
Data yang diisih kemudiannya boleh dipindahkan semula ke vektor:
vec.assign(s.begin(), s.end());
2. Memadam Pendua Secara Manual
Pendua juga boleh dipadamkan secara manual dengan melelaran melalui vektor dan menyemak pendua berturut-turut:
for (auto it = vec.begin(); it != vec.end(); ) { if (*it == *(it+1)) { it = vec.erase(it); } else { ++it; } }
Isih Pertimbangan
Isih selepas penyingkiran pendua adalah perlu untuk mengekalkan yang disusun pesanan. Walau bagaimanapun, pesanan itu mungkin tidak dijamin dalam semua kes:
Kes 1: Isih Dulu, Padam Selepas
Jika vektor diisih sebelum memadamkan pendua, std:: unik berkemungkinan akan mengekalkan susunan yang diisih.
Kes 2: Padam Dahulu, Isih Selepas
Jika pendua dipadamkan sebelum diisih, pesanan itu mungkin tidak dijamin. Ini kerana susunan penyingkiran mungkin menjejaskan indeks elemen seterusnya.
Prestasi
Prestasi pendekatan ini berbeza-beza bergantung pada bilangan pendua. Untuk sejumlah besar pendua, menukar kepada set dan kembali kepada vektor boleh menjadi lebih cepat daripada memadamkan pendua secara manual. Walau bagaimanapun, untuk sebilangan kecil pendua, pemadaman manual mungkin lebih cekap.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengeluarkan Pendua dengan Cekap dan Menyusun Vektor C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!