带比较器的关联容器(multiset)

lu_bhu 2008-12-25 05:20:24
C++ Primer第四版中15.8.3句柄一节中有下面的内容:
inline bool compare(const Sale_item& lhs, const Sale_item& rhs)
{
return lhs.book<rhs.book;
}

typedef bool (*Comp)(const Sale_item&, const Sale_item&);

std::multiset<Sale_item, Comp > items(compare);

Comp是函数的指针,compare是个函数,最后一句是什么意思?能将一个函数名作为参数传递给容器吗?
...全文
209 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
就呆在云上 2008-12-25
  • 打赏
  • 举报
回复

我帮你顶一下
或许有1分
lu_bhu 2008-12-25
  • 打赏
  • 举报
回复
是VC6编译的,晚上回去再试一下VC 2005看一下能不能编译通过
nineforever 2008-12-25
  • 打赏
  • 举报
回复
不要用VC6这种古董了
VC9编译通过
xiaoyisnail 2008-12-25
  • 打赏
  • 举报
回复
你用vc6编译的吧,vc6支持比较差
gcc通过了
lu_bhu 2008-12-25
  • 打赏
  • 举报
回复
#pragma warning (disable:4786)
#include <set>
#include <string>
using namespace std;

class Sale_item{
public:
string book;
};

inline bool compare(const Sale_item& lhs, const Sale_item& rhs)
{
return lhs.book <rhs.book;
}

void main(){
typedef bool (*Comp)(const Sale_item&, const Sale_item&);
std::multiset <Sale_item, Comp > items(compare);
}

为什么编译都不通过?哪位能指点一下?
nineforever 2008-12-25
  • 打赏
  • 举报
回复
Comp是函数指针类型
compare是函数,但是可以隐式转换成函数指针

比如你可以这样写:
Comp p=compare;

将compare传给multiset的构造函数之后,multiset将使用该函数进行大小的比较
luojc714 2008-12-25
  • 打赏
  • 举报
回复
貌似楼主想问的把一个函数传递给另一个函数是什么意思吧!
其实函数的名字就代表函数的地址,就跟平时传指针一个意思...
这个函数指针会被用来比较容器中的元素...也就是说你自己定义了一个容器元素的比较规则...
SearchLife 2008-12-25
  • 打赏
  • 举报
回复
up
nullah 2008-12-25
  • 打赏
  • 举报
回复

std::multiset <Sale_item, Comp > items(compare);
|-->比较器类型 |---->具体的比较函数
P_ghost 2008-12-25
  • 打赏
  • 举报
回复
传递一个小于算法给multiset容器,这样构造出来的容器对象的排序算法采用你自己订制的小于算法。
因为Sale_item是个你自己定义的类型,有可能标准的小于操作符“<”不能正常工作,所以你需要自己定义个一“<”操作来完成Sale_item对象间的比较,multiset容器是提供快速与查询的容器,所以其内部数据结构需要排序,自然就需要比较容器中包含的Sale_item对象了。
建议LZ看看STL的知识吧,了解一下泛型编程是如何实现的。
oyljerry 2008-12-25
  • 打赏
  • 举报
回复
compare作为比较的容器标准,functor

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧