class nitest
{
friend bool operator<(const nitest&, const nitest&);
public:
nitest(int n = 0) : p(new int(n)){}
~nitest()
{
delete p;
}
private:
int *p;
};
inline bool operator<(const nitest &l, const nitest &r)
{
return *(l.p) < *(r.p);
}
int _tmain(int argc, _TCHAR* argv[])
{
nitest ni1(2);
nitest ni2(6);
nitest ni3(2);
nitest ni4(2);
multiset<nitest> nitestset;
nitestset.insert(ni1);
nitestset.insert(ni2);
nitestset.insert(ni3);
nitestset.insert(ni4);
int gf = nitestset.count(ni1);
}
不明白的地方是,我没有重载nitest的operator==,那multiset::count是怎么比较元素的?nitest的数据是指针,指针是不同啊?为什么gf还能正确得到3?
------解决方案--------------------------------------------------------
!(a<b) && !(b>a)就是a==b
------解决方案--------------------------------------------------------
对于关联容器(set和map系列),容器进行排序所用的比较符是< ,而没有用==,需要查找某个值时用的是等价的概念而不是相等,等价的含义2楼已经解释,直观上!(a<b) && !(b<a)就是a==b 的确是正确的,但对于某些特定的自定义类型重载可能会出现不符合的情况,需要注意