草庐IT

custom-sort

全部标签

c++ - std::sort 在 std:vector of pointers 上失败

以下代码在对vector进行排序时崩溃。#include#include#includeusingnamespacestd;structFoo{intx;//inty;Foo():x(0){}};structCmp{booloperator()(Foo*p1,Foo*p2)const{if(p1->x!=p2->x)returnp1->xx;//if(p1->y!=p2->y)returnp1->yy;returntrue;}};intmain(){vectorv;for(inti=0;i为什么会这样? 最佳答案 boolopera

C++ std::sort 与类中的谓词函数

我想在特定类中以特定顺序对特定结构的vector进行排序。我在一个类中编写了结构和谓词函数的定义,并在具有这些结构和函数的类的方法中运行std::sort。但是出现了编译错误。gcc版本是4.0.1,操作系统是MacOSX。代码如下:classsample{public:structs{intx;inty;};boolcmp(structsa,structsb){if(a.x==b.x)returna.yvec;//...sort(vec.begin(),vec.end(),cmp);//compilationerror//...return0;}};intmain(void){sam

【C++修行之道】竞赛常用库函数(sort,min和max函数,min_element和max_element、nth_element)

目录一、sort1.1sort简介语法参数功能适用容器1.2sort的用法1.3自定义比较函数 示例1265蓝桥题——排序二、min和max函数三、min_element和max_element 497蓝桥题——成绩分析四、nth_element一、sort1.1sort简介sort函数包含在头文件中。在使用前需要#include或使用万能头文件。sort是C++标准库中的一个函数模板,用于对指定范围内的元素进行排序。sort算法使用的是快速排序(QuickSort)或者类似快速排序的改进算法,具有较好的平均时间复杂度,一般为O(nlogn)语法Sort(start,end,cmp)参数(1)

制作名单< t> .sort

因此,我有一个带有对象的列表。这些对象具有属性时间戳。问题是,此属性是一个字符串。现在,在按时间戳对列表进行排序时,排序函数忽略了“AM”和“PM”varhistoricalAlarms=newList();foreach(...){...}historicalAlarms.Sort((x,y)=>((Belimed.Alarm.HistoricalAlarmItem)x).TimeStamp.CompareTo(((Belimed.Alarm.HistoricalAlarmItem)y).TimeStamp));是否可以将时间戳转换为新的DateTime对象,以使排序功能不忽略AM和PM?请

c++ - 对整个范围进行排序时,std::partial_sort() 与 std::sort() 的性能对比?

以下两种方法之间是否存在显着差异?方式1使用sort或partial_sort,具体取决于vector的大小,而方式2始终使用partial_sort。我觉得方法2更有吸引力,因为我的谓词比示例中的要复杂一些,所以我不想重复它。但我想知道partial_sort是否比sort表现更差,因为它并不意味着用于对整个范围进行排序,这就是为什么我倾向于使用方式1。intmain(){std::vectorvec;vec.push_back(1.0);vec.push_back(3.0);vec.push_back(2.0);vec.push_back(5.0);vec.push_back(4.

c++ - 从不兼容类型 'int' 分配给 [custom typdef]

在我的main.c文件的一个方法中,我声明了变量irq_raised,它是irq_type类型。我在另一个文件的typedef中定义了irq_type,并将其#import到main.c的顶部。typedefenum{IRQ_NONE=0x0000,IRQ_VBLANK=0x0001,IRQ_HBLANK=0x0002,IRQ_VCOUNT=0x0004,IRQ_TIMER0=0x0008,IRQ_TIMER1=0x0010,IRQ_TIMER2=0x0020,IRQ_TIMER3=0x0040,IRQ_SERIAL=0x0080,IRQ_DMA0=0x0100,IRQ_DMA1=0x

c++ - 为什么 std::map 没有 find/lower_bound 重载,std::list 没有 sort 重载?

我知道你不应该使用std::find(some_map.begin(),some_map.end())或std::lower_bound,因为它会采用线性时间而不是some_map.lower_bound提供的对数时间。std::list也会发生类似的事情:有用于排序的std::list::sort函数,但您无法调用std::sort(some_list.begin(),some_list.end()),因为迭代器不是随机访问的。但是,例如,std::swap具有标准容器的重载,因此swap(some_map,other_map)的调用需要O(1),而不是在)。为什么C++标准不为ma

c++ - 为什么 std::sort 不接受函数内声明的比较类

我当时正在工作,在一个函数中编写比较器(稍后移动,当我决定最好的地方时),并注意到了这个特性。我想了一会儿,意识到我不明白为什么如果我使用内部比较器代码将无法编译,但外部比较器很好。有什么解释吗?快速测试工具:#include#include#includeclassCompareMe{public:CompareMe(intin):toCompare(in){}inttoCompare;};classComparators{public:booloperator()(CompareMe*first,CompareMe*second){returnfirst->toComparetoC

c++ - qsort() vs std::sort,比较函数哲学差异

我想知道为什么在qsort(){Cversion}和std::sort()中有两种完全不同的方法来指定比较函数。qsort需要这样的比较函数:不知道为什么需要三种返回值-1、0、+1。intcomp(int*x,int*y){return*x-*y;}而std::sort()的比较函数对我来说看起来更一致,因为它是根据函数编写的,遵循不变量。即如果x小于y函数返回true,则x相对于y处于正确位置boolcomp(intx,inty){returnx当返回一个bool(或具有两个值0和1的int)更简单和干净时,为什么我们需要三个值-1,0,+1? 最佳答案

c++ - 在对对象的 vector 进行排序时使用 stable_sort

我有classPassanger有变量stringname;stringstation;stringticket;然后我有另一个类,在这个类中我有vectormyQueue;现在我想使用stable_sort排序myQueue.有没有可能,怎么说给stable_sort,应该是什么key,根据它排序myQueue?std::stable_sort(myQueue.begin(),myQueue.end(),maybeSomethingElse());? 最佳答案 std::stable_sort()过载接受自定义比较器作为其第三个参