2013-04-09 30 views
1

嗨我有問題重載我的結構的運算符用作關鍵。這裏是我的結構我打算作爲一個地圖鍵使用,基本上它有2個字符數組:重載運算符結構爲映射關鍵

struct FConfig 
{ 
    char product[3]; 
    char exchange[4]; 
    bool operator < (const FConfig &rhs) const 
    { 
     return (strcmp(product, rhs.product) < 0 || 
       strcmp(exchange, rhs.exchange <0)); 
    } 
}; 

我的比較,只要產品的一個或交換不等於RHS的,那麼關鍵就是視爲獨特我使用這個,並在運行期間得到「無效的運算符<」。我在創建密鑰方面完全陌生,所以在覆蓋<運營商時,我仍然在理解邏輯時遇到一些問題。感謝任何幫助,謝謝!

+0

可能的重複:http://stackoverflow.com/questions/8532224/invalid-operator-while-sorting-stdlist – Spook 2013-04-09 04:21:50

+1

如果你爲你的類提供一個<操作符,它必須像使用'std'例程時的行爲一樣。我想,你的運算符不是可傳遞的 - 你可以找到三個FConfig值,例如A Spook 2013-04-09 04:24:10

回答

3

您對operator <應該如何工作的困惑很常見。你希望它看起來是這樣的:

bool operator < (const FConfig &rhs) const 
{ 
    int product_comparision = strcmp(product,rhs.product); 
    if (product_comparision<0) return true; 
    if (product_comparision>0) return false; 
    return strcmp(exchange,rhs.exchange)<0; 
} 

由於product是你的主鍵,你甚至可以考慮次要關鍵是如果主鍵的值相等的唯一一次。

+0

如果這些是正確的字符串,你可以'返回std :: make_pair(product,exchange) chris 2013-04-09 04:29:33

+0

是的,這對我來說很困惑,因爲當設計鑰匙時,我只是想他們是否會平等,不會小於'。你的解決方案和解釋解決我的問題。非常感謝Vaughn :) – mikevil14rin 2013-04-09 04:30:51