Rumah >pembangunan bahagian belakang >C++ >Bagaimana Menentukan Susunan Lemah yang Tegas `

Bagaimana Menentukan Susunan Lemah yang Tegas `

DDD
DDDasal
2025-01-03 07:56:38688semak imbas

How to Define a Strict Weak Ordering `

Mentakrifkan Operator < untuk Pesanan Lemah Tegas pada n-tuple

Soalan:

Bagaimana untuk melaksanakan < operator untuk n-tuple (cth., 3-tuple) yang mematuhi konsep pesanan lemah yang ketat?

Jawapan:

Memahami Susunan Lemah Tegas

Penyusunan lemah yang ketat ialah hubungan matematik yang mentakrifkan perbandingan khusus antara dua objek:

  • Setara: Kedua-dua objek dianggap sama (iaitu, a < b dan b < a kedua-duanya palsu).
  • Kurang Daripada: Satu objek dianggap "kurang daripada" yang lain (iaitu, a < b adalah benar dan b < a adalah salah).

Melaksanakan < Operator

Untuk menentukan < pengendali untuk n-tuple, anda mesti menetapkan syarat yang menentukan apabila satu tuple dianggap setara atau kurang daripada yang lain. Ini bergantung pada struktur data khusus dan semantik tupel anda.

Contoh dengan std::tuple

Kelas std::tuple C Standard Library melaksanakan yang betul < operator untuk pesanan lemah yang ketat. Jika anda tidak dapat menggunakan kelas ini, anda boleh melaksanakan < anda sendiri secara manual; operator:

struct S {
    ThingA a;
    ThingB b;
};

bool operator<(S const& lhs, S const& rhs) {
    return std::tie(lhs.a, lhs.b) < std::tie(rhs.a, rhs.b);
}

Ini mengandaikan bahawa ThingA dan ThingB sudah melaksanakan pesanan lemah yang ketat.

Anda juga boleh melaksanakan kesaksamaan menggunakan pendekatan yang serupa:

bool operator==(S const& lhs, S const& rhs) {
    return std::tie(lhs.a, lhs.b) == std::tie(rhs.a, rhs.b);
}

Atas ialah kandungan terperinci Bagaimana Menentukan Susunan Lemah yang Tegas `. 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