※ 引述《blueice08 (藍色的冰)》之銘言:
: ※ 引述《blueice08 (藍色的冰)》之銘言:
: : 假設我定義兩個結構及一個map:
: : typedef struct i_test {
: : unsigned int ii1;
: : unsigned int ii2;
: : unsigned int ii3;
: : };
^^^^^^^^^^^^^^^^^^^^^^^^^^^這個是你的 key 吧。
: 在網路上看到了這樣的討論串:
: http://www.daniweb.com/forums/showthread.php?p=812327#post812327
: 其中七樓(#7)的回應中提到需要"讓(key1, key2)的組合是唯一"的,
: 因此在下面作者lyle017有了這樣的回覆:
: bool operator<(const keyInfo& A) const
: {
: return ((Key1<A.Key1) || (Key2<A.Key2));
: }
: 而我將這樣的概念用在我key的struct中有5個變數的程式中,
^^^^^^^ 你的 key 裡才 3 個變數。
先講講你是怎樣把這樣的概念用在你 key 的 struct 中吧。
解決問題並不是選擇了一條路線一遇到錯誤就退回起點找別條,
這不是好習慣。
常常好不容易找對路敲對了門,
卻又跑回家走另一條摔進山谷的路。
其實我完全不能理解你捨棄這條路,
又根據什麼參考資料或資訊寫出後來的這行的原因:
return !((Key1==A.Key1) && (Key2==A.Key2))
是什麼誘因讓你決定放棄前一條路,
使你覺得用 ==、&&、! 會比前者更有希望?
另外我建議你把上面那個 operator< 的實作改寫成這樣來閱讀:
if(Key1 < A.Key1) return true;
if(Key2 < A.Key2) return true;
return false;
因為我不曉得你清不清楚它那樣寫是利用 || 的 short-cut evaluation 特性。
改善程式碼的書籍一般也會建議你改寫成這樣,
即使那種 || 的用法早已是全世界都相當流行的慣例寫法。
--
Ling-hua Tseng (uranus@tinlans.org)
Department of Computer Science, National Tsing-Hua University
Interesting: C++, Compiler, PL/PD, OS, VM, Large-scale software design
Researching: Software pipelining for VLIW architectures
Homepage: http://www.tinlans.org
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.160.116.1
※ 編輯: tinlans 來自: 118.160.116.1 (01/19 08:19)