stl中sort函数模板定义,stl sort函数

  stl中sort函数模板定义,stl sort函数

  做ACM题时,排序是一个经常使用的操作。如果每次都自己写一个冒泡的O (n 2)排序,不仅程序容易超时,还会浪费宝贵的游戏时间,而且很可能出错。STL中有一个排序函数,可以直接对数组进行排序,复杂度为n*log2(n)。要使用这个函数,您需要包含头文件。

  这个函数可以传递两个或三个参数。第一个参数是要排序的区间的第一个地址,第二个参数是区间结束地址的下一个地址。即排序的区间为[a,b]。简单来说,有一个数组int a[100]。要从a[0]到a[99]对元素进行排序,只需编写sort(a,a 100)。默认的排序方法是升序。

  以我的问题“AC策略”为例。如果需要对数组T的0到len-1的元素进行排序,只需写sort(t,T len);

  排序向量V,sort(v.begin()、V . end());

  排序的数据类型不限于整数,只要定义小于运算的类型即可,比如string类string。

  如果没有数据类型小于操作定义,或者如果你想改变排序顺序,你需要使用第三个参数3354比较函数。比较函数是自定义函数,返回值为bool,指定“小于”是什么样的关系。要按降序对整数数组进行排序,可以先定义一个比较函数cmp。

  布尔cmp(int a,int b)

  {

  返回a

  }

  排序时写sort(a,a 100,CMP);

  假设您自己定义了一个结构节点。

  结构节点{

  int a;

  int b;

  双c;

  }

  有一个node类型的数组节点arr[100],我想对它进行排序:首先按值A升序排序,如果值A相同则按值B降序排序,如果值B仍然相同则按值C降序排序。你可以写这样一个比较函数:

  以下是代码片段:

  布尔cmp(节点x,节点y)

  {

  如果(x.a!=y.a)返回x.a

  如果(x.b!=y.b)返回x.b

  返回x.c

  }

  按时间排序(ARR,A 100,CMP);

  看最后一个完整的例子,初赛的一个题目“文件名排序”。

  以下是代码片段:

  #包括iostream

  #包含算法

  #包含字符串

  使用命名空间std

  //定义一个结构来表示文件,A表示文件名,B表示文件类型(“File”或“Dir”)

  结构节点{

  字符串a,b;

  };

  //在//ASCII代码中,所有大写字母都在所有小写字母之前, A Z a z

  //这个问题要求忽略大小写,所以不能直接比较字符串。定制了一个lt函数,意思是小于。

  //首先将两个字符串都转换为小写,然后比较大小(字典顺序)

  bool lt(字符串x,字符串y)

  {

  int I;

  for(I=0;I x . length();我)

  if(x[i]=A x[i]=Z )

  x[I]= A (x[I]- A );

  for(I=0;I y . length();我)

  if(y[i]=A y[i]=Z )

  y[I]= A (y[I]- A );

  返回x

  }

  //自定义比较函数,先按B值升序排列(即‘Dir’在‘File’之前)

  //如果B的值相同,那么用刚刚定义的lt函数,按照A的升序排列。

  布尔comp(节点x,节点y)

  {

  如果(x.b!=y.b)返回x.b

  返回lt(x.a,y . a);

  }

  int main()

  {

  节点arr[10001];

  int size=0;

  而(cin arr[size]。一排[大小]。b)

  尺寸;

  sort(数组,数组大小,comp);

  for(int I=0;I尺寸;我)

  cout arr[i]。a arr[i]。b endl

  返回0;

  }

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: