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
Lepaskan: 2024-12-20 20:24:10
asal
119 orang telah melayarinya

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());
Salin selepas log masuk

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());
Salin selepas log masuk

Data yang diisih kemudiannya boleh dipindahkan semula ke vektor:

vec.assign(s.begin(), s.end());
Salin selepas log masuk

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;
  }
}
Salin selepas log masuk

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!

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