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

  在《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/p/3087245.html