c++ stl-c++ sort() 比较函数重载问题

问题描述

c++ sort() 比较函数重载问题

我用sort()函数排序
class A {
public:
int a;
bool operator<(A aa) const
{
if (a < aa.a) {
return true;
}
return false;
}
bool operator<(const A &aa) const
{
if (a < aa.a) {
return true;
}
return false;
}

};
这俩个版本的重载,为什么sort只支持第一种。

解决方案

可以查看sort的参数中的函数原型

解决方案二:

你这说的重载函数实质上一样的,一个是传形参,一个是传递变量的引用,你在调用的时候两种方式写法上没有区别,只是系统在内存的操作上有区别。如果可以看看你是怎么调用的,我觉得你把引用和取地址操作符的用法搞混了。
下面是一个地址解释了什么是引用,什么是取地址操作
http://blog.csdn.net/syfly007/article/details/11486543

时间: 2024-09-14 05:13:15

c++ stl-c++ sort() 比较函数重载问题的相关文章

详细解说 STL 排序(Sort)

排序 一切复杂的排序操作,都可以通过STL方便实现 ! 0 前言: STL,为什么你必须掌握 对于程序员来说,数据结构是必修的一门课.从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来.幸运的是这些理论都已经比较成熟,算法也基本固定下来,不需要你再去花费心思去考虑其算法原理,也不用再去验证其准确性.不过,等你开始应用计算机语言来工作的时候,你会发现,面对不同的需求你需要一次又一次去用代码重复实现这些已经成熟的算法,而且会一次又一次陷入一些由于自己疏忽而产生的b

STL中sort、priority_queue、map、set的自定义比较函数

STL中,sort的默认排序为less,也就是说从小到大排序:priority_queue默认是less,也就说大顶堆:map默认是less,也就说用迭代器迭代的时候默认是小的排在前面:set默认是less,也就是说用迭代器迭代的时候是从小到大排序的. 1.sort #include <stdio.h> #include <algorithm> #include <functional> using namespace std; bool comp(const int&

详细解说STL排序(Sort)

0 前言: STL,为什么你必须掌握 对于程序员来说,数据结构是必修的一门课.从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来.幸运的是这些理论都已经比较成熟,算法也基本固定下来,不需要你再去花费心思去考虑其算法原理,也不用再去验证其准确性.不过,等你开始应用计算机语言来工作的时候,你会发现,面对不同的需求你需要一次又一次去用代码重复实现这些已经成熟的算法,而且会一次又一次陷入一些由于自己疏忽而产生的bug中.这时,你想找一种工具,已经帮你实现这些功能,你想

STL中sort函数用法简介

 做ACM题的时候,排序是一种经常要用到的操作.如果每次都自己写个冒泡之类的O(n^2)排序,不但程序容易超时,而且浪费宝贵的比赛时间,还很有可能写错.STL里面有个sort函数,可以直接对数组排序,复杂度为n*log2(n).使用这个函数,需要包含头文件.     这个函数可以传两个参数或三个参数.第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址.也就是说,排序的区间是[a,b).简单来说,有一个数组int a[100],要对从a[0]到a[99]的元素进行排序,只要写sort

C++ 关于STL中sort()对struct排序的方法_C 语言

前言 一直没有系统去看过c++,因为懂得一些c的基本语法,在实际编程中用到c++,只能用到哪些看哪些,发现这样虽然能够完成大部分工作,但是有时候效率实在太低,比如说这节要讲的Std::sort()函数的使用,调了半天才调通.开通c/c++序列博客是记录在使用c++中一些难题,避免以后重犯错,当然以后会尽量挤出时间来较系统学习下c++. 开发环境:QtCreator2.5.1+OpenCV2.4.3 实验基础 首先来看看std中的快速排序算法sort的使用方法: template <class R

巧妙的设计stl中的比较函数,以避免不必要的cpu开销

在stl algorithm.h中,常利用一些排序操作,比如通过vector实现一个堆. 如果堆的每个元素是自定义结构,也就是,自己实现的类作为堆的基本元素, 那么make_heap和push_heap,pop_heap就需要开发者提供自己的比较函数. bool __cmp(value &v1 ,value & v2). 在stl的内部实现中,当这个_cmp判定为true时,就需要调整heap,所以如果 v1 == v2 返回 true.那么恭喜你,掉进了坑里.如果返回false,则能够节

STL 中的&amp;lt; 重载

同样的代码,mingw可以运行,vs不能运行. vs出错报告: 重载运算符里面的逻辑我故意有遗漏,想知道Windows靠什么来发现,好神奇! 答:小于号有几个基本性质,非自反(a<a一定false),不对称(a<b和b<a至多一个成立),传递(a<b,b<c=>a<c).在二叉树构造过程中发现这三个性质任意一个性质有违反,那就可以报错了. vs的STL跟Gcc的STL差别有多大呢? 答:我看过某些stl代码,mingw的和vs的确实不一样,但一些具体到某个公司某个

三十分钟掌握STL

三十分钟掌握STL 这是本小人书.原名是<using stl>,不知道是谁写的.不过我倒觉得很有趣,所以化了两个晚上把它翻译出来.我没有对翻译出来的内容校验过.如果你没法在三十分钟内觉得有所收获,那么赶紧扔了它.文中我省略了很多东西.心疼那,浪费我两个晚上. 译者:kary contact:karymay@163.net STL概述 STL的一个重要特点是数据结构和算法的分离.尽管这是个简单的概念,但这种分离确实使得STL变得非常通用.例如,由于STL的sort()函数是完全通用的,你可以用它

数组排序方法的性能比较(中):Array.Sort 实现分析

昨天我们比较了Array.Sort方法与LINQ排序的性能,知道了LINQ排序的性能以较大幅度落后于Array.Sort方法.而对于Array.Sort来说,性能最高的是其中使用Comparer.Default作为比较器的重载方法.在前文的末尾我们做出了推测:由于排序算法已经近乎一个标准了(快速排序),因此从算法角度来说,Array.Sort方法和LINQ排序上不应该有那么大的差距,因此造成两者性能差异的原因,应该是具体实现方式上的问题. 下载.NET框架的代码 既然是比较实现的区别,那么阅读代