我有我使用作爲一個std關鍵::地圖的std ::地圖::找到()
struct PpointKey{
unsigned int xp,yp; //pixel coordinates
unsigned int side;
PpointKey(unsigned xp,unsigned yp,unsigned side=5):xp(xp),yp(yp),side(side)
{}
bool operator==(const PpointKey& other) const{
const unsigned int x = other.xp;
const unsigned int y = other.yp;
return ((x>=xp && x<=xp+side) && (y>=yp && y<=yp+side));
}
bool operator<(const PpointKey& other) const{
const unsigned int x = other.xp;
const unsigned int y = other.yp;
const unsigned other_distance_2 = x*x + y*y;
const unsigned this_distance_2 = this->xp*this->xp + this->yp * this->yp;
return this_distance_2 < other_distance_2;
}
};
我想達成什麼是使用find一個簡單的結構( )使用xp,yp屬性距離在side
以內的密鑰訪問地圖。換句話說,如果我有一個(X,Y)的元組,我想找到的地圖裏面是滿足運營商==功能
return ((x>=xp && x<=xp+side) && (y>=yp && y<=yp+side));
中的條件這可能使用找到的第一個PpointKey?我得到map.end(),所以我想檢查find()函數是否使用operator ==。也許搜索算法會更好?
在此先感謝。
請記住,'std :: map'只使用'operator <'。如果兩個鍵都小於另一個,則認爲兩個鍵相等。 – 2010-06-22 07:09:10