multiset中元素排序比较函数的使用

本文介绍了如何在C++中使用multiset时自定义排序函数。通过定义一个比较Sales_item对象的函数,并使用该函数作为multiset构造函数的一部分,可以实现对multiset内元素的特定排序方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  在《C++ Primer》关联容器的相关章节并没有介绍到multiset的多个构造函数的使用,在后来的章节中,涉及到一个问题的解决:如果multiset的元素类型是类类型,在不能使用默认的“<”操作符进行元素比较的时候,需要用到自定义的元素比较函数,将这个函数在multiset本身提供的构造函数中使用可以避免一些问题,具体详见《C++ Primer》第754页。但作为一个例子记下,作为一个使用模式的提醒:

  首先,定义一个函数用于比较 Sales_item 对象:

     // compare defines item ordering for the multiset in Basket 

     inline bool 
     compare(const Sales_item &lhs, const Sales_item &rhs) 
     { 
         return lhs->book() < rhs->book(); 
     } 

用下面代码将Comp 定义为函数类型指针的同义词,该函数类型与我们希望用来比较 Sales_item 对象的比较函数相匹配。

     // type of the comparison function used to order the multiset 
     typedef bool (*Comp)(const Sales_item&, const Sales_item&); 

于是,就有了如下的定义multiset对象的形式:

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

“这个定义是说,items 是一个 multiset,它保存 Sales_item 对象并使用 Comp 类型的对象比较它们。multiset 是空的——我们没有提供任何元素,但我们的确提供了一个名为 compare 的比较函数。当在 items 中增加或查找元素时,将用 compare 函数对 multiset 进行排序。”

  这个例题还有其它一点需要思考:MSDN中multiset的构造函数并没有看到这种形式。

 

 

 

转载于:https://www.cnblogs.com/tingshuixuan2012/archive/2013/05/19/3087245.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值