Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengeluarkan Pendua dengan Cekap dan Menyusun Vektor C?

Bagaimanakah Saya Boleh Mengeluarkan Pendua dengan Cekap dan Menyusun Vektor C?

Barbara Streisand
Barbara Streisandasal
2024-12-20 20:24:10172semak imbas

How Can I Efficiently Remove Duplicates and Sort a C   Vector?

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!

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