莱芜亓家网站,网站认证怎么认证,手机企业网站开发,好用的做图网站泛型算法中的定制操作 许多算法都会比较输入序列中的元素以达到排序的效果#xff0c;通过定制比较操作#xff0c;可以控制算法按照编程者的意图工作。 普通排序算法#xff1a;templateclass RandomIterator
void sort(RandomIterator first,RandomIterator last)… 泛型算法中的定制操作 许多算法都会比较输入序列中的元素以达到排序的效果通过定制比较操作可以控制算法按照编程者的意图工作。 普通排序算法 templateclass RandomIterator
void sort(RandomIterator first,RandomIterator last){if(first last || first 1 last)return;if(last - first 20) return bubble_sort(first,last,pred);auto mid mid3(first,last-1,pred); //mid3 is unknow,is a function for calculating the mid?while(p1 p2){while(pred(*p1,mid)(p1p2)) p1;while(!pred(*p2,mid)(p1p2)) --p2;if(p1 p2){swap(*p1,*p2);}}swap(*p1,*(last-2)); //what is sort ?sort(first,p1,pred);sort(p11,last,pred);
} 排序算法的定制操作排序算法只能由小到大。 二排序算法的定制操作多了一个类型BinaryPredicate可以用来定制规则。 templateclass RandomIterator,class BinaryPredicate
void sort(RandomIterator first,RandomIterator last,BinaryPredicate){if(first last || first 1 last)return;if(last - first 20)return bubble_sort(first,last,pred);auto mid mid3(first,last,pred);auto p1 first, p2 last - 2;while(p1 p2){while(pred(*p1,mid) (p1 p2)) p1;while(!pred(*p1,mid) (p1 p2)) --p2;if(p1 p2){swap(*p1,*p2);}}swap(*p1,*(last-2));sort(first,p1,pred);sort(p11,last,pred);
} 谓词相当于一个动作比如一个需求希望从大到小则可以先定义一个谓词函数 bool cmp(const int v1,const int v2){ return v1 v2;}sort(v.begin(),v.end(),cmp); 将该函数传递给sort算法时就可以从小到大排序了。 lambda表达式 在前面的例子中定义了一个函数传递给sort算法这个函数可以重复使用还好如果使用一次的话就很麻烦。 这种情况下lambda就可以用上了它相当于谓语没有定义函数。 sort(v.begin(),v.end(),[]cmp(const int int v1,const int v2){ return v1 v2;} --------------------------------------------------------------------------------------------------------------------- 实验楼出品 转载于:https://www.cnblogs.com/wanghao-boke/p/10491284.html