lexicographical_compare

[機能]

  2 つの系列をアルファベット順に比較し,先の系列が次の系列より辞書的に前にあれば true を返します.2 引数の比較関数を指定することも可能です(下の表現,sort 参照).

[形式]
#include <algorithm>

template <class InputIterator1, class InputIterator2>
    bool lexicographical_compare(InputIterator1 first1, InputIterator1 last1,
                                 InputIterator2 first2, InputIterator2 last2);
template <class InputIterator1, class InputIterator2, class Compare>
    bool lexicographical_compare(InputIterator1 first1, InputIterator1 last1,
                                 InputIterator2 first2, InputIterator2 last2,
                                 Compare comp);		

[使用例]

  1. lexicographical_compare の使用方法です.
    #include <stdio.h>
    #include <vector>
    #include <algorithm>
    
    using namespace std;
    
    int main()
    {
    					// 初期設定
    	vector<int> v1 {10, 11, 12, 13, 14};
    	printf("v1 :");
    	for (auto x : v1)
    		printf("  %d", x);
    	printf("\n");
    
    	vector<int> v2 {11, 12, 13, 14, 15};
    	printf("v2 :");
    	for (auto x : v2)
    		printf("  %d", x);
    	printf("\n");
    
    	vector<int> v3 {12, 13, 14, 15, 16};
    	printf("v3 :");
    	for (auto x : v3)
    		printf("  %d", x);
    	printf("\n");
    					// v1 と v2
    	bool b = lexicographical_compare(v1.begin(), v1.end(), v2.begin(), v2.end());
    
    	if (b)
    		printf("  v1 は v2 より前\n");
    	else
    		printf("  v1 は v2 より後\n");
    					// v3 と v2
    	b = lexicographical_compare(v3.begin(), v3.end(), v2.begin(), v2.end());
    	if (b)
    		printf("  v3 は v2 より前\n");
    	else
    		printf("  v3 は v2 より後\n");
    
    	return 0;
    }
    			
    (出力)
    v1 :  10  11  12  13  14
    v2 :  11  12  13  14  15
    v3 :  12  13  14  15  16
      v1 は v2 より前
      v3 は v2 より後			

菅沼ホーム 本文目次 演習問題解答例 付録目次 索引