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!