[問題] 關於stl的operator

看板C_and_CPP作者 (Arim5566)時間14年前 (2011/06/05 15:03), 編輯推噓1(102)
留言3則, 1人參與, 最新討論串1/2 (看更多)
小弟對於這方面的觀念可能與之前有些出入 比如說我定義了一個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
你的 function 給一樣的輸入會有一樣的值嗎?
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)
文章代碼(AID): #1DwoefF4 (C_and_CPP)
文章代碼(AID): #1DwoefF4 (C_and_CPP)