0

だから私は地図を持っています:

std::map<time_t, obj*, CompFunc>

そして、time_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 &);
4

1 に答える 1

2

の年がの年以下trueの場合、比較関数は返されます。の年が の年よりも小さい場合にのみ、それを返す必要があります。2 つの年が等しい場合、比較子は を返さなければなりません。t1t2truet1t2false

比較子は厳密な弱い順序付けを提供する必要があります。

于 2012-10-04T21:10:54.083 に答える