std::lexicographical_compare
![]() |
This page has been machine-translated from the English version of the wiki using Google Translate.
The translation may contain errors and awkward wording. Hover over text to see the original version. You can help to fix errors and improve the translation. For instructions click here. |
Определено в заголовочном файле <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) | |
comp
.comp
.Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
- Два диапазонов по сравнению элемент за элементом.Оригинал:Two ranges are compared element by element.Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда. - Первый элемент несовпадение определяет, какой диапазон является лексикографически меньше' или' больше, чем другие.Оригинал:The first mismatching element defines which range is lexicographically less or greater than the other.Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда. - Если диапазон является префиксом другой, более короткий диапазон лексикографически меньше', чем другие.Оригинал:If one range is a prefix of another, the shorter range is lexicographically less than the other.Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда. - Если два диапазона имеют эквивалентные элементы и той же длины, то диапазоны лексикографически' равны.Оригинал:If two ranges have equivalent elements and are of the same length, then the ranges are lexicographically equal.Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда. - Пустой диапазон лексикографически меньше', чем любая непустая диапазон.Оригинал:An empty range is lexicographically less than any non-empty range.Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда. - Два пустых диапазонах лексикографически' равны.Оригинал:Two empty ranges are lexicographically equal.Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Содержание |
[править] Параметры
first1, last1 | - | первый ряд элементов для изучения
Оригинал: the first range of elements to examine Текст был переведён автоматически через Google Translate. Вы можете проверить и исправить перевод. Для инструкций кликните сюда. |
first2, last2 | - | второй ряд элементов для изучения
Оригинал: the second range of elements to examine Текст был переведён автоматически через Google Translate. Вы можете проверить и исправить перевод. Для инструкций кликните сюда. |
comp | - | comparison function which returns true if the first argument is less than the second. The signature of the comparison function should be equivalent to the following: bool cmp(const Type1 &a, const Type2 &b); The signature does not need to have const &, but the function must not modify the objects passed to it. |
Требования к типам | ||
-InputIt1, InputIt2 должен соответствовать требованиям InputIterator .
|
[править] Возвращаемое значение
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
[править] Сложность
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
[править] Возможная реализация
Первый вариант |
---|
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); } |
Второй вариант |
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'; }
Возможный вывод:
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