C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++のSTL配列(std::array)で使える関係演算子の使い方を徹底解説

C++には、同じ型のオペランド同士を比較するための関係演算子(比較演算子)が6種類用意されています。具体的には、><==<=>=!= の6つです。
本記事では、C++のSTL配列(std::array)におけるこれらの関係演算子の動作について詳しく解説します。STL配列の比較で中心的な役割を果たすのは、2つの配列コンテナ間の等価比較(==)小なり比較(<)の2つです。

等価比較演算子(==)の動作

等価比較(==)では、演算子の左辺(L.H.S)と右辺(R.H.S)にある両方の配列の要素を、先頭要素から順番に比較していきます。そして、最初に不一致が見つかった時点で比較処理は終了します。すべての要素が一致した場合のみ、両者の配列は等しいと判断されます。

小なり比較演算子(<)と辞書式順序

小なり比較(<)は、辞書式順序(レキシコグラフィック順)で動作します。このアルゴリズムは、標準ライブラリの std::lexicographical_compare と同じ仕組みです。比較は operator< を相互的な方法で逐次実行し、a<bb<a の両方をチェックします。

辞書式順序とは、辞書で単語をアルファベット順に並べる際に用いられる規則で、最初の文字から順に末尾まで比較していく方式のことです。配列の場合も同様に、先頭要素から順に大小を判定していきます。

その他の関係演算子の定義

残りの4つの演算子は、==< を組み合わせる形で、以下のように定義されています。

  • a!=b!(a==b) と等価
  • a>b(b<a) と等価
  • a<=b!(b<a) と等価
  • a>=b!(a<b) と等価

これらの演算子は、<array> ヘッダー内でオーバーロードされています。

注意: 比較を行う左辺・右辺の両方のSTL配列は、同一のテンプレートパラメータ <Type, Length>(型と要素数)を持っている必要があります。型やサイズが異なる配列同士はコンパイルエラーとなります。

計算量と戻り値

比較処理の時間計算量は線形時間(O(n))であり、配列のサイズに比例します。戻り値は、条件が成立すれば true、成立しなければ false が返されます。

サンプルコード

#include <iostream>
#include <stdio.h>
#include <array>
using namespace std;
int main(){
    // 配列の宣言
    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

この出力結果から、>=!(a<b)<=!(a>b)!=!(a==b) がそれぞれ同じ判定結果になることが確認できます。STL配列の比較演算子を正しく理解することで、より安全かつ効率的なC++プログラミングが可能になります。

  1. C++の関係演算子とは?比較演算子の一覧と使い方を解説

    C++では、2つの変数に格納された値を比較し、それらの大小関係や等価性を判定するために関係演算子(relational operators)を使用します。関係演算子を使うことで、「ある値が別の値より大きいか」「等しいか」といった関係を簡単に調べることができます。C++で利用できる主な関係演算子は以下の通りです。演算子説明>より大きい(左辺が右辺より大きい場合に真)>=以上(左辺が右辺以上の場合に真)==等しい(両辺が等しい場合に真)!=等しくない(両辺が異なる場合に真)<=以下(左辺が右辺以下の場合に真)<より小さい(左辺が右辺より小さい場合に真)関係演算子の使い方これ

  2. C++の関係演算子とは?種類と使い方を実例付きで解説

    C++プログラミングでは、2つの変数に格納された値を比較し、両者の大小関係や等価性を判定するために関係演算子を使用します。関係演算子は、if文などの条件分岐やfor文・while文などのループ処理において不可欠な要素であり、比較の結果はbool型(true / false)として返されます。C++で利用できる主な関係演算子は以下の通りです。演算子説明>より大きい(左辺が右辺より大きいか)>=以上(左辺が右辺以上か)<より小さい(左辺が右辺より小さいか)<=以下(左辺が右辺以下か)==等しい(左右の値が等しいか)!=等しくない(左右の値が異なるか)関係演算子の使い方これら