Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ตัวดำเนินการเชิงสัมพันธ์ (Relational Operators) บน STL Array ใน C++

มีตัวดำเนินการเชิงสัมพันธ์หกตัวสำหรับเปรียบเทียบออเปอранด์ชนิดเดียวกัน ได้แก่ >, <, ==, <=, >=, != บทความนี้อธิบายตัวดำเนินการเหล่านี้บน STL array ใน C++ ตัวดำเนินการหลักสองตัวที่ใช้กับ STL array คือ การเปรียบเทียบความเท่ากัน (==) และการเปรียบเทียบน้อยกว่า (<) ระหว่างสอง array container

การเปรียบเทียบความเท่ากัน (==) เริ่มเปรียบเทียบสมาชิกของทั้งสองอาร์เรย์จากด้านซ้ายและขวาของ == เริ่มจากสมาชิกแรกของทั้งสองอาร์เรย์ การเปรียบเทียบจะหยุดที่จุดที่พบความไม่ตรงกันครั้งแรก

การเปรียบเทียบน้อยกว่า (<) ทำงานแบบ lexicographic (แบบพจนานุกรม) อัลกอริทึมทำงานเหมือน std::lexicographic_compare การเปรียบเทียบทำงานแบบลำดับชั้น โดยใช้ operator(<) ในลักษณะ timbal (ตรวจสอบ a<b และ b<a ทั้งคู่) ลำดับ lexicographic ใช้ในพจนานุกรมเพื่อจัดเรียงคำตามตัวอักษรจากตัวแรกจนถึงตัวสุดท้าย ตัวดำเนินการอื่นๆ ใช้ == และ < ดังนี้:

  • a != b เทียบเท่ากับ !(a == b)
  • a > b เทียบเท่ากับ (b < a)
  • a <= b เทียบเท่ากับ !(b < a)
  • a >= b เทียบเท่ากับ !(a < b)

ตัวดำเนินการเหล่านี้ถูก overload ใน header <array>

หมายเหตุ: STL array ทั้งสองฝั่ง L.H.S. และ R.H.S. ควรมีพารามิเตอร์ <Type, Length> เหมือนกัน

Time Complexity ของการเปรียบเทียบเป็น linear time ขึ้นอยู่กับขนาดอาร์เรย์ O(n)

ค่าที่คืนเป็น true หากเงื่อนไขเป็นจริง มิฉะนั้น false

ตัวอย่าง

#include <iostream>
#include <stdio.h>
#include <array>
using namespace std;

int main() {
    // การประกาศ array
    array<int, 5> marks1 = { 10, 20, 30, 40, 50 };
    array<int, 5> marks2 = { 100, 200, 300, 400, 500 };
    array<int, 5> marks3 = { 10, 20, 30, 40, 50 };
    
    // a>=b เทียบเท่ากับ !(a<b) ตามที่แสดง
    if (marks1 >= marks2) {
        cout << "Marks1 is greater than equal to Marks2\n";
    } else {
        cout << "Marks1 is neither greater nor equal to Marks2\n";
    }
    
    if (!(marks1 < marks2)) {
        cout << "Marks1 is greater than equal to Marks2\n";
    } else {
        cout << "Marks1 is neither greater nor equal to Marks2\n";
    }
    
    // a<=b เทียบเท่ากับ !(a>b) ตามที่แสดง
    if (marks1 <= marks2) {
        cout << "Marks1 is less than equal to Marks2\n";
    } else {
        cout << "Marks1 is neither less nor equal to Marks2\n";
    }
    
    if (!(marks1 > marks2)) {
        cout << "Marks1 is less than equal to Marks2\n";
    } else {
        cout << "Marks1 is neither less nor equal to Marks2\n";
    }
    
    // a!=b เทียบเท่ากับ !(a==b) ตามที่แสดง
    if (marks1 != marks3) {
        cout << "Marks1 is not equal to Marks2\n";
    } else {
        cout << "Marks1 is equal to Marks2\n";
    }
    
    if (!(marks1 == marks3)) {
        cout << "Marks1 is not equal to Marks2\n";
    } else {
        cout << "Marks1 is equal to Marks2\n";
    }
    return 0;
}

ผลลัพธ์

Marks1 is neither greater nor equal to Marks2
Marks1 is neither greater nor equal to Marks2
Marks1 is less than equal to Marks2
Marks1 is less than equal to Marks2
Marks1 is equal to Marks2
Marks1 is equal to Marks2