stl的map很好用,其原型是:
template < class Key, class T, class Compare = less<Key>,
class Allocator = allocator<pair<const Key,T> > > class map;
但如果key是自定义类型,仍想使用map,则必须自行为map提供less函数。
比如:
struct stu
{
struct key
{
string name;
string address;
};
struct value
{
// other values
}
//methods
};
如想使用stl::map<stu::key, stu *>这样的map,则必须为key写一个less函数。
这有两种办法,一是直接写一个比较函数或类作为参数(参考上述原型)传给map;
另一方法是重装stu::key的<函数:
bool stu::key::operator < (const key& k) const
{
if (name < k.name) return true; else if (name > k.name) return false;
if (address< k. address) return true; else if (address > k. address) return false;
return false;
}
特别注意最后的“return flase”:因为stl::map是利用(a !< b) && (b !< a)的逻辑
来判断a和b是否相等,所以当两个key相等时,less函数(<)需要返回false以表明"!<"。