2013-04-17 27 views
0

我有一個小問題在C++中,我希望你能幫助我。定義運算符<在結構中的另一個結構的2個對象

我想定義一個struct myPoint。這個結構應該能夠比較類型點中的兩個對象(定義爲pair)。我希望myPoint的每個「實例」能夠自行比較兩個點。這就是我試圖代碼:

typedef pair<int,int> point; 
struct myPoint{ 
    point p; 
    inline bool operator<(point x, point y){ 
    return !ccw(p,x,y); 
} 

所以每myPoint應該考慮自己的點P,同時比較兩個點X,Y。 的(翻譯)錯誤我得到的是

"error C2804: Binary Operator '<' has too much Arguments/Parameters" 

現在看來似乎是syntacticly可能使該運營商只有一個點,我想它會比較點到myPoint,但是這不是它應該是什麼。 問題的背景是,我想使用預定義的排序函數來排序向量的點和排序「函數」我想提供一個myPoint對象。

+1

你的'operator <'根本沒有意義 - 你會怎麼稱呼它?另外,'inline'是多餘的,因爲你的函數已經被定義在一個類中,因此自動'inline'。 –

回答

0

我認爲(也許)那是你正在嘗試做的是寫一個仿

struct myPoint 
{ 
    myPoint(point p) { this->p = p; } 
    bool operator()(point x, point y) const 
    { 
     return !ccw(p,x,y); 
    } 
    point p; 
}; 

函子可以作爲第三個參數爲std ::排序進行傳遞。

std::sort(vec.begin(), vec.end(), myPoint(p)); 

儘管我懷疑,假設ccw指的是逆時針方向,我不認爲這是一個有效的排序條件。

+0

謝謝!對於快速和偉大的答案,是的,這正是我想要做的。我讀了某事。關於仿函數,編碼它,稍微改變了排序條件,現在它工作;) - thx – user2292605

0

<定義只有一個參數的過載。正如@KonradRudolph指出,這是沒有意義在這種情況下超負荷<,因爲你不能在分揀使用它或任何

typedef pair<int,int> point; 
struct myPoint{ 
    point p; 
    bool smaller(const point &a, const point &b) 
    { 
     return !ccw(p,a,a) 
    } 
}; 
0

該片段應說明你基本的東西:

#include <utility> 

typedef std::pair<int,int> point; 

bool less(const point& p1, const point& p2) 
{ 
    return (p1.first < p2.first) || 
      ((p1.first == p2.first) && (p1.second == p2.second)); 
} 

struct myPoint { 
    point p; 
    inline bool operator < (const point& p2) { 
     return less(p, p2); 
    } 
}; 

int main() 
{ 
    return 0; 
} 
  1. 您還沒有「關閉」運營商<。
  2. 運算符<只需要一個參數,如果是像這樣的方法。
  3. 使用常量引用。
相關問題