std::lexicographical_compare
提供: cppreference.com
![]() |
このページは、Google 翻訳を使って英語版から機械翻訳されました。
翻訳には誤りや奇妙な言い回しがあるかもしれません。文章の上にポインタをおくと、元の文章が見れます。誤りを修正して翻訳を改善する手助けをしてください。翻訳についての説明は、ここをクリックしてください。 |
Defined in header <algorithm>
|
||
template< class InputIt1, class InputIt2 > bool lexicographical_compare( InputIt1 first1, InputIt1 last1, |
(1) | |
template< class InputIt1, class InputIt2, class Compare > bool lexicographical_compare( InputIt1 first1, InputIt1 last1, |
(2) | |
最初の範囲の[first1, last1)かどうかをチェックするには、第2の範囲[first2, last2)より辞書式に小さい'です。最初のバージョンは、要素を比較するoperator<使用して、2番目のバージョンは、指定された比較関数
comp
を使用しています.Original:
Checks if the first range [first1, last1) is lexicographically less than the second range [first2, last2). The first version uses operator< to compare the elements, the second version uses the given comparison function
comp
.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
比較は、次のプロパティを持つ操作ですΣ*:
Original:
Lexicographical comparison is a operation with the following properties:
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
- 二つのレンジは要素ごとに比較されます.Original:Two ranges are compared element by element.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. - 第一の不整合要素が辞書順でどの範囲定義小さいや大きい他より.Original:The first mismatching element defines which range is lexicographically less or greater than the other.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. - 1範囲が別の接頭辞である場合は、より短い範囲は辞書的に他より少ない'です.Original:If one range is a prefix of another, the shorter range is lexicographically less than the other.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. - 2つの範囲に等価な要素を持ち、同じ長さのものである場合、その範囲は、辞書的には'等しい.Original:If two ranges have equivalent elements and are of the same length, then the ranges are lexicographically equal.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. - 空の範囲は、任意の非空の範囲がより辞書式に小さい'です.Original:An empty range is lexicographically less than any non-empty range.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. - 二つの空の範囲は、辞書的には'等しい.Original:Two empty ranges are lexicographically equal.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
目次 |
[編集] パラメータ
first1, last1 | - | 検討する要素の最初の範囲
Original: the first range of elements to examine The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
first2, last2 | - | 検討する要素の第2の範囲
Original: the second range of elements to examine The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
comp | - | 比較関数. 最初の値が二つ目の値より小さい 場合、 trueを返します. 比較関数のシグネチャは以下と同等でなければなりません. bool cmp(const Type1 &a, const Type2 &b); シグネチャは |
型の要件 | ||
-InputIt1, InputIt2 は InputIterator
の要求を満足しなければなりません。 |
[編集] 値を返します
最初の範囲は辞書順で秒未満..true場合
Original:
true if the first range is lexicographically less than the second.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
[編集] 複雑性
比較演算、2·min(N1, N2)とN1 = std::distance(first1, last1)..ほとんどのN2 = std::distance(first2, last2)アプリケーションで
Original:
At most 2·min(N1, N2) applications of the comparison operation, where N1 = std::distance(first1, last1) and N2 = std::distance(first2, last2).
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
[編集] 可能な実装
First version |
---|
template<class InputIt1, class InputIt2> bool lexicographical_compare(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2) { for ( ; (first1 != last1) && (first2 != last2); first1++, first2++ ) { if (*first1 < *first2) return true; if (*first2 < *first1) return false; } return (first1 == last1) && (first2 != last2); } |
Second version |
template<class InputIt1, class InputIt2, class Compare> bool lexicographical_compare(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, Compare comp) { for ( ; (first1 != last1) && (first2 != last2); first1++, first2++ ) { if (comp(*first1, *first2)) return true; if (comp(*first2, *first1)) return false; } return (first1 == last1) && (first2 != last2); } |
[編集] 例
このコードを実行します
#include <algorithm> #include <iostream> #include <vector> #include <cstdlib> #include <ctime> int main() { std::vector<char> v1 {'a', 'b', 'c', 'd'}; std::vector<char> v2 {'a', 'b', 'c', 'd'}; std::srand(std::time(0)); while (!std::lexicographical_compare(v1.begin(), v1.end(), v2.begin(), v2.end())) { for (auto c : v1) std::cout << c << ' '; std::cout << ">= "; for (auto c : v2) std::cout << c << ' '; std::cout << '\n'; std::random_shuffle(v1.begin(), v1.end()); std::random_shuffle(v2.begin(), v2.end()); } for (auto c : v1) std::cout << c << ' '; std::cout << "< "; for (auto c : v2) std::cout << c << ' '; std::cout << '\n'; }
Possible output:
a b c d >= a b c d d a b c >= c b d a b d a c >= a d c b a c d b < c d a b