读书人

map自定义比较函数erase.find有有关问

发布时间: 2012-04-24 14:15:38 作者: rapoo

map自定义比较函数erase.find有问题


class StrCompare
{
public:
bool operator ()(const AnsiString str1,const AnsiString str2)const
{
return (str1.AnsiCompareIC(str2) <= 0 );
}
};

typedef multimap<AnsiString, tagZqdmItem*, StrCompare> mapZqdm;


插入,输出元素都没有问题。所有元素也都按希望的一样有序。

但是find总是会返回end().
erase直接就失去响应了。



[解决办法]
return (str1.AnsiCompareIC(str2) <= 0 );
==》
return (str1.AnsiCompareIC(str2) < 0 );

因为 stl传递的是<.排序用的是<是 a<b, 大于是 a>b && !(a<b). 等于是 !(a>b)&& !(a<b)
所以 如果你传入的是小于等于,那么永远不可能为真。

读书人网 >C++

热点推荐