Bagaimana untuk Mengeluarkan Pendua daripada Vektor Tidak Diisih sambil Mengekalkan Pesanan?

Linda Hamilton
Lepaskan: 2024-11-13 05:59:02
asal
379 orang telah melayarinya

How to Remove Duplicates from an Unsorted Vector while Maintaining Order?

Mengalih keluar Pendua daripada Vektor Tidak Diisih

Mengekalkan susunan kejadian pertama sambil menghapuskan pendua daripada vektor tidak diisih adalah penting dalam pelbagai situasi. Walaupun pendekatan mudah yang menggunakan set dan lelaran manual adalah berkesan, ia boleh dipertingkatkan dengan memanfaatkan algoritma STL.

Untuk mencapai matlamat ini, algoritma std::copy_if menyediakan penyelesaian yang mudah. Dengan mentakrifkan predikat yang menjejaki elemen yang telah diproses dan mengembalikan palsu untuk pendua, kami boleh menapis elemen yang diingini.

Jika sokongan C 11 tidak tersedia, nama kekok std::remove_copy_if boleh digunakan, dengan logiknya terbalik. Berikut ialah contoh yang belum diuji untuk menggambarkan:

template <typename T>
struct NotDuplicate {
  bool operator()(const T& element) {
    return s_.insert(element).second; // true if s_.insert(element);
  }
 private:
  std::set<T> s_;
};
Salin selepas log masuk

Seterusnya, kod berikut boleh digunakan:

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

Dalam penyelesaian ini, std::ref memastikan bahawa functor stateful tidak disalin secara dalaman dalam algoritma. Walau bagaimanapun, std::copy_if tidak mengenakan sebarang keperluan ke atas kesan sampingan functor yang digunakan.

Atas ialah kandungan terperinci Bagaimana untuk Mengeluarkan Pendua daripada Vektor Tidak Diisih sambil Mengekalkan Pesanan?. 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