Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bolehkah Fungsi Isih Perpustakaan Standard Mengisih Jenis Ditakrifkan Pengguna Berdasarkan Medan Tertentu?

Bolehkah Fungsi Isih Perpustakaan Standard Mengisih Jenis Ditakrifkan Pengguna Berdasarkan Medan Tertentu?

Linda Hamilton
Linda Hamiltonasal
2024-11-11 12:13:03722semak imbas

Can the Standard Library Sort Function Sort User-Defined Types Based on Specific Fields?

Isih Jenis Ditakrifkan Pengguna dengan Isih Perpustakaan Standard

Soalan:

Bolehkah standard fungsi isihan perpustakaan digunakan untuk mengisih vektor struct yang ditentukan pengguna berdasarkan medan tertentu dalam struct?

Contoh:

struct MyType {
    int a;
    int b;
};

vector<MyType> moo;

// Insert data into moo...

// Sort moo by the value of the 'a' field

Jawapan :

Ya, fungsi isihan perpustakaan standard boleh mengendalikan senario ini jika jenis yang ditentukan pengguna memenuhi keperluan khusus:

  1. Beban Operator Perbandingan: Jenis mesti melaksanakan operator bool operator perbandingan yang terlebih beban<(const MyType& other) const untuk menentukan cara kejadian jenis itu dibandingkan.
  2. Pembina Salin: Pembina salinan (sama ada pengkompil- dijana atau tersuai) mesti wujud.

Pelaksanaan:

struct MyType {
    int a;
    int b;

    bool operator<(const MyType&amp; other) const {
        // Implementation that compares the 'a' fields
    }

    // Copy constructor
    MyType(const MyType&amp; other)
        : a(other.a), b(other.b) { }

    // Other constructors...
};

Pendekatan Alternatif Menggunakan Fungsi Pesanan:

Jika melebihkan pengendali perbandingan tidak boleh dilaksanakan, fungsi atau functor susunan boleh digunakan sebagai argumen ketiga kepada fungsi isihan.

bool type_is_less(const MyType&amp; t1, const MyType&amp; t2) {
    // Comparison logic
}

std::sort(c.begin(), c.end(), type_is_less);

Pendekatan ini boleh memberi manfaat dalam kes di mana:

  • Melebihi muatan operator perbandingan tidak diingini.
  • Jenis terbina dalam atau penuding perlu diisih.
  • Berbilang kriteria pengisihan diperlukan.

Atas ialah kandungan terperinci Bolehkah Fungsi Isih Perpustakaan Standard Mengisih Jenis Ditakrifkan Pengguna Berdasarkan Medan Tertentu?. 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