C++ Primer multiset<Sales_item,comp> items求解
c++ Primer 中超市购物系统中
inline bool compare(const Sales_item &lhs,const Sales_item &rhs)
{
return lhs->book()<rhs->book(); //调用Item_base *operator->()操作符。。
}
class Basket
{
typedef bool (*comp)(const Sales_item&,const Sales_item&);
public:
typedef std::multiset<Sales_item,comp> set_type;
typedef set_type::size_type size_type;
typedef set_type::const_iterator const_iter;
Basket():items(compare){}
void add_item(const Sales_item &item){items.insert(item);}
size_type size(const Sales_item &i)const{return items.count(i);}
double total()const;
private:
std::multiset<Sales_item,comp> items;
};
compare是Basket的成员函数吗?为什么这样定义?
另外 Basket():items(compare){}
items是一个容器,而compare却是一个函数指针,这样初始化行吗?
[解决办法]
1. compare不是成员函数。
2. multiset的构造函数有3中形式(c++98)
explicit multiset( const Compare& comp = Compare(),
const Allocator& alloc = Allocator() );
template< class InputIt >
multiset( InputIt first, InputIt last,
const Compare& comp = Compare(),
const Allocator& alloc = Allocator() );
multiset( const multiset& other );