lexicographical_compare

本文介绍C++ STL中的lexicographical_compare函数,该函数用于比较两个序列的字典序大小。文章提供了函数声明及使用示例,包括如何使用自定义比较函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

lexicographical_compare:

  C++ STL 泛型算法函数:用于按字典序比较两个序列。

  函数申明:

  //重载1,如果[first1, last1)按字典序列小于[first2, last2),返回true,否则返回false。

  template <class InputIterator1, class InputIterator2 >

  bool

  lexicographical_compare(

  InputIterator1 first1, InputIterator1 last1,

  InputIterator2 first2, InputIterator2 last2 );

  //重载2,功能同重载1,增加了比较函数comp,即大小关系由comp函数确定。

  template < class InputIterator1, class InputIterator2,

  class Compare >

  bool

  lexicographical_compare(

  InputIterator1 first1, InputIterator1 last1,

  InputIterator2 first2, InputIterator2 last2,

  Compare comp );

  示例代码:

  #include <algorithm>

  #include <iostream>

  #include <iterator>

  using namespace std;

  void Output(const int * a,const int & a_size,const int * b,const int & b_size)

  {

  cout<<"a[]=";

  copy(a,a+a_size,ostream_iterator<int>(cout," "));

  cout<<endl;

  cout<<"b[]=";

  copy(b,b+b_size,ostream_iterator<int>(cout," "));

  cout<<endl;

  }

  typedef bool (* CMP)(const int &,const int &);

  int Compare(const int * a,const int & a_size,const int * b,const int & b_size,CMP cmp) //按照cmp方式进行比较

  {

  bool ASmallerThanB,BSmallerThanA;

  ASmallerThanB=lexicographical_compare(a,a+a_size,b,b+b_size,cmp); //按照cmp方式进行比较

  BSmallerThanA=lexicographical_compare(b,b+b_size,a,a+a_size,cmp);

  if(! ASmallerThanB && ! BSmallerThanA) //a[] 和 b[] 相等

  return 0;

  else if(ASmallerThanB) //a[] < b[]

  return -1;

  else

  return 1;

  }

  int Compare(const int * a,const int & a_size,const int * b,const int & b_size) //默认比较方式

  {

  bool ASmallerThanB,BSmallerThanA;

  ASmallerThanB=lexicographical_compare(a,a+a_size,b,b+b_size); //默认比较方式

  BSmallerThanA=lexicographical_compare(b,b+b_size,a,a+a_size);

  if(! ASmallerThanB && ! BSmallerThanA) //a[] 和 b[] 相等

  return 0;

  else if(ASmallerThanB) //a[] < b[]

  return -1;

  else

  return 1;

  }

  bool greater(const int & a,const int & b) //自定义越大的字典序越小

  {

  return a>b;

  }

  int main()

  {

  int a[]={1,2,3,4,5,6};

  int b[]={1,2,3,4,5,6};

  Output(a,6,b,6);

  cout<<"Compare(a,6,b,6)="<<Compare(a,6,b,6)<<endl;

  cout<<"Compare(a,6,b,6,greater)="<<Compare(a,6,b,6,greater)<<endl;

  rotate(a+2,a+4,a+6);

  Output(a,6,b,6);

  cout<<"Compare(a,6,b,6)="<<Compare(a,6,b,6)<<endl;

  cout<<"Compare(a,6,b,6,greater)="<<Compare(a,6,b,6,greater)<<endl;

  return 0;

  }

  return a>b;

  }

  int main()

  {

  int a[]={1,2,3,4,5,6};

  int b[]={1,2,3,4,5,6};

  Output(a,6,b,6);

  cout<<"Compare(a,6,b,6)="<<Compare(a,6,b,6)<<endl;

  cout<<"Compare(a,6,b,6,greater)="<<Compare(a,6,b,6,greater)<<endl;

  rotate(a+2,a+4,a+6);

  Output(a,6,b,6);

  cout<<"Compare(a,6,b,6)="<<Compare(a,6,b,6)<<endl;

  cout<<"Compare(a,6,b,6,greater)="<<Compare(a,6,b,6,greater)<<endl;

  return 0;

  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值