所以我有一张地图:
std::map<time_t, obj*, CompFunc>
我正在使用基于year_t年份的CompFunc进行插入。我可以遍历地图,按照年份顺序插入所有内容,完全按照我的意愿。但是当我:
typedef std::map<time_t, obj*, CompFunc>::iterator Iter;
Iter it = y.find(e1);
std::cout << ctime(&e1); <-- prints out Mon Apr 10 17:45:00 1944, exact match to time_t object in map
std::cout << ctime(&it->first); <-- prints out Wed Dec 31 18:00:07 1969????
因此,当我:
y.erase (e1);
//or
y.erase(it->first);
没有删除。我很沮丧......
编辑:这是比较功能。bool CompFunc::operator()(const time_t & t1, const time_t & t2)
{
CmpVal = CompareYear(t1, t2);
if(CmpVal != 0)
{
if(CmpVal == -1) {return true;}
return false;
}
return true;
}
short CmpFunc::CompareYear(const time_t & t1, const time_t & t2)
{
if(r1.getYear(&t1) < r2.getYear(&t2)) {return -1;}
if(r1.getYear(&t1) == r2.getYear(&t2)) {return 0;}
return -2;
}
来自.h:
public:
Cmp_event_year() {};
~Cmp_event_year() {};
bool operator()(const time_t &, const time_t &);
private:
Time_t_read r1;
Time_t_read r2;
short CmpVal;
short CompareYear(const time_t &, const time_t &);
答案 0 :(得分:2)
如果true
的年份小于或等于年t1
,则您的比较器会返回t2
。当且仅当true
的年份小于t1
的年份时,它才需要返回t2
。如果两年相等,则比较器必须返回false
。
比较器必须提供strict weak ordering。