关联式容器都有一个键值,键值要求必须支持<比较操作。Map或set或multimap或multiset在存储数据时,根据键值的<顺序顺序存储。对于set,因为在插入时需要比较键值是否相等,在此,它对于是否相等的确认方法是:如果 a<b为false 并且 b<a为false,则相等。
但是,在定义关联式容器时,可以指定自己的比较函数,见如下map类定义:
template<class _Kty,
class _Ty,
class _Pr = less<_Kty>,
class _Alloc = allocator<pair<const _Kty, _Ty> > >
class map
: public _Tree<_Tmap_traits<_Kty, _Ty, _Pr, _Alloc, false> >
{……}
因此,可以如下定义自己的multiset对象
Typedef bool (*Comp)(const Sales_item&, const Sales_item&);
Std::multiset<Sales_item,Comp> items(compare);