[問題] 關於stl的operator
小弟對於這方面的觀念可能與之前有些出入
比如說我定義了一個struct如下
struct yline
{
int line;
int insert_priority;
yline(){}
yline(const int iyline,const int iip): // to initialize the member data
line(iyline),insert_priority(iip){};
bool operator<(const yline & cp) const
{
int cpy=function(cp.line)
int y=function(line);
if(y==cpy)
{
return insert_priority<cp.insert_priority;
}
else{
return y>cpy;
}
}
};
其中的functon是要算再給定x的情況下,計算每條線的y值
y是由大到小排序,如果y一樣的話就比較當初insert的順序
較早insert的話就排前面(也就是insert_priority較小)
但是很奇怪的是
有些pair(line,insert_priority)沒辦法在目前的set中找到
比如目前set的元素裏面有兩個yline(5,7),yline(6,8)
也就是有線段5跟線段6
線段5的insert的順序在線段6的前面(7<8)
但是我用set.find(yline(5,7)); //可以找到線段5
而用set.find(yline(6,8)); //很奇怪,找不到線段6
當然上面的例子是我舉例的情形..可能實際上在跑的時候可以找到..
如果我把比較的順序對調的話(比如說y>cpy改成cpy>y)
結果又會不一樣(某某線段本來有找到,可是改了之後又找不到@@)
所以想請問operator的行為到底要怎麼定義才是符合我的需求?
--
~宅男的四個徵兆~
∠□ ○ ! * \○/ ★ (○ ?
╦╦└□ " ○□═ □ □>
║║√√ ╦══╦ ∥ |\
一回家就上PTT 每天想正妹 以當好人為樂 忘記正妹虧欠自己
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.172.243.21
推
06/05 15:20, , 1F
06/05 15:20, 1F
→
06/05 15:21, , 2F
06/05 15:21, 2F
→
06/05 15:22, , 3F
06/05 15:22, 3F
我之前有想過是不是function的問題
但是照理說應該不太可能阿...
如果我要找線段6的話
operator裏面的行為是y=function(6),cpy=function(6);
兩個function的實作都一樣..
照理說算出來的y應該會一樣吧@@
如果y一樣的話又會比較insert_priority
而6的insert_priority又等於6的insert_priority(不大於也不小於)
set再這裡應該就會判斷說找到相同的元素@@
我比較困惑的是把f(x,y)改成f(y,x)->(x>y改成y>x)的話不知道為啥結果會不一樣@@
在這邊我把y>cp.y改成cp.y<y,很奇怪的是y一樣是從大排到小...
不知道整個行為的流程是怎麼樣的?
※ 編輯: Arim 來自: 218.172.243.21 (06/05 15:30)
※ 編輯: Arim 來自: 218.172.243.21 (06/05 15:54)
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):