Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengeluarkan Pendua daripada Tatasusunan Tidak Diisih Semasa Mengekalkan Susunan Sisipan Menggunakan Algoritma STL?

Bagaimana untuk Mengeluarkan Pendua daripada Tatasusunan Tidak Diisih Semasa Mengekalkan Susunan Sisipan Menggunakan Algoritma STL?

Linda Hamilton
Linda Hamiltonasal
2024-11-11 19:02:03486semak imbas

How to Remove Duplicates from an Unsorted Array While Maintaining Insertion Order Using STL Algorithms?

Algoritma STL untuk Penyingkiran Duplikat dengan Pemeliharaan Tertib

Memandangkan tatasusunan integer tidak diisih, tugasnya adalah untuk mengalih keluar elemen pendua sambil mengekalkan sisipan tertib kejadian pertama setiap integer. Walaupun pendekatan mudah menggunakan set boleh mencapai matlamat ini, penyelesaian yang dioptimumkan yang memanfaatkan algoritma STL menawarkan penyelesaian yang lebih cekap dan elegan.

Pendekatan Berasaskan Algoritma STL

STL menyediakan beberapa algoritma yang memudahkan manipulasi bekas yang cekap. Satu algoritma sedemikian ialah std::copy_if. Algoritma ini boleh digunakan untuk mencipta vektor baharu yang mengandungi elemen unik sambil mengekalkan susunan asalnya.

Untuk melaksanakan penyelesaian ini, tentukan fungsi predikat yang menjejaki elemen yang ditemui sebelum ini dan mengembalikan palsu jika elemen telah pun diproses. Ini memastikan bahawa hanya elemen unik disalin ke dalam vektor baharu.

Pelaksanaan

Dalam C 11 dan kemudian, tentukan objek fungsi dengan operator terlampau () yang melaksanakan predikat:

template <typename T>
struct NotDuplicate {
  bool operator()(const T& element) {
    return s_.insert(element).second;  // true if element is unique
  }

private:
  std::set<T> s_;
};

Lepaskan predikat ini kepada std::copy_if bersama dengan yang asal dan vektor sasaran:

std::vector<int> uniqueNumbers;
NotDuplicate<int> pred;
std::copy_if(numbers.begin(), numbers.end(),
             std::back_inserter(uniqueNumbers),
             std::ref(pred));

Jika sokongan C 11 tidak tersedia, gunakan std::remove_copy_if dan terbalikkan logik predikat untuk mencapai hasil yang sama.

Kesimpulan

Pendekatan ini menunjukkan keberkesanan algoritma STL untuk memanipulasi bekas dengan cekap sambil memastikan pematuhan kepada keperluan pesanan yang dikehendaki. Dengan memanfaatkan algoritma std::copy_if, anda boleh mengalih keluar pendua daripada vektor yang tidak diisih sambil mengekalkan susunan sisipan elemen unik.

Atas ialah kandungan terperinci Bagaimana untuk Mengeluarkan Pendua daripada Tatasusunan Tidak Diisih Semasa Mengekalkan Susunan Sisipan Menggunakan Algoritma STL?. 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