std::lexicographical_compare

函数原型:ios

default (1)
template <class InputIterator1, class InputIterator2>
  bool lexicographical_compare (InputIterator1 first1, InputIterator1 last1,
                                InputIterator2 first2, InputIterator2 last2);
custom (2)
template <class InputIterator1, class InputIterator2, class Compare>
  bool lexicographical_compare (InputIterator1 first1, InputIterator1 last1,
                                InputIterator2 first2, InputIterator2 last2,
                                Compare comp);
函数用途:

按照词典序比较前者是否小于后者。函数

当序列<first1, last1>按照字典序比较小于后者序列<first2, last2>,则返回true。不然,返回false。性能

所谓字典序比较,指的是两个序列分别从第一个开始一一按照字典序进行比较,若是相同位置的元素相同,则继续向后比较,直到相同位置出现不一样的元素为止。spa

示例:code

// lexicographical_compare example
#include <iostream> // std::cout, std::boolalpha
#include <algorithm> // std::lexicographical_compare
#include <cctype> // std::tolower

// a case-insensitive comparison function:
bool mycomp (char c1, char c2)
{ return std::tolower(c1)<std::tolower(c2); }

int main () {
  char foo[]="Apple";
  char bar[]="apartment";

  std::cout << std::boolalpha;

  std::cout << "Comparing foo and bar lexicographically (foo<bar):\n";

  std::cout << "Using default comparison (operator<): ";
  std::cout << std::lexicographical_compare(foo,foo+5,bar,bar+9);
  std::cout << '\n';

  std::cout << "Using mycomp as comparison object: ";
  std::cout << std::lexicographical_compare(foo,foo+5,bar,bar+9,mycomp);
  std::cout << '\n';

  return 0;
}
默认比较函数,使用 ASCII 进行比较,例如本例中'A'为65, 'a'为97,所以'a'>'A'。

自定义的比较函数mycomp中,将全部的字符转换成为小写,因此第一个未匹配的字符是第三个的'p'和'a'。orm

输出:ci

Comparing foo and bar lexicographically (foo<bar):
Using default comparison (operator<): true
Using mycomp as comparison object: false

性能分析:原型

最多比较次数为: 2*min(count1,count2)it


版权声明:本文为博主原创文章,未经博主容许不得转载。io

本站公众号
   欢迎关注本站公众号,获取更多信息