Vector 同士の比較

lexicographical_compare() で Vector 同士の大小関係を調べます。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プログラムの説明

  1. Vector 同士を比べる専用の関数 lexicographical_compare() を使ってみました。
    第五引数に、比較する関数を指定することが出来ます。
  2. vect1 ~ vect3 の領域を定義して比較してみます。
    VectCompare() が Vector 同士を比べる関数です。
    lexicographical_compare() の引数に比べる Vector の iterator を指定します。
    /*★ vector の比較    前田  稔 ★*/
    #include <stdio.h>
    #include <vector>
    using namespace std;
    
    vector vect1(5,(1,2,3,4,5));
    vector vect2(6,(1,2,3,5,4,6));
    vector vect3(5,(1,2,3,3,5));
    
    // vector の比較
    bool VectCompare(vector v1, vector v2)
    {   bool ret;
        ret = lexicographical_compare(v1.begin(), v1.end(), v2.begin(), v2.end());
        return ret;
    }
    
    int main()
    {
        if (VectCompare(vect1,vect2))   printf("(1,2,3,4,5) <= (1,2,3,5,4,6)\n");
        else    printf("(1,2,3,4,5) > (1,2,3,5,4,6)\n");
        if (VectCompare(vect1,vect3))   printf("(1,2,3,4,5) <= (1,2,3,3,5)\n");
        else    printf("(1,2,3,4,5) > (1,2,3,3,5)\n");
        if (VectCompare(vect2,vect3))   printf("(1,2,3,5,4,6) <= (1,2,3,3,5)\n");
        else    printf("(1,2,3,5,4,6) > (1,2,3,3,5)\n");
        _getch();
        return 0;
    }
    

【NOTE】

  1. 第五引数に、比較する関数を指定してみました。
    // 文字列の比較
    bool ciStringCompare(const string s1, const string s2)
    {   bool ret;
        ret = lexicographical_compare(s1.begin(), s1.end(), s2.begin(), s2.end(), ciChar);
        return ret;
    }
    
  2. ciChar() 関数では、大小関係が決まると true を、決まらないときは false を返します。
    < は使えるのですが、大小に関係しない != に変えると実行時に落ちます。
    // 1文字の比較
    bool ciChar(char c1, char c2)
    {
        return tolower(static_cast(c1)) < tolower(static_cast(c2));
        //return tolower(static_cast(c1)) != tolower(static_cast(c2));
    }
    
  3. ciChar() 関数の別法です。
    (lc1 < lc2) と (lc1 > lc2) をそれぞれ単独では使えるのですが、2行並べると落ちます。
    また || で結合しても落ちます。
    あくまでも大小関係を判定するコードを書かなければならないようです。 (^_^;)
    // 1文字の比較
    bool ciChar(char c1, char c2)
    {
        int lc1 = tolower(c1);
        int lc2 = tolower(c2);
    
        if (lc1 < lc2)  return true;
        //if (lc1 > lc2)  return true;
        //if (lc1 < lc2 || lc1 > lc2)  return true;
        return false;
    }
    

超初心者のプログラム入門(C/C++)