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)
所以 如果你传入的是小于等于,那么永远不可能为真。