c++中,結構體是無法進行==,>,<,>=,<=,!=這些操作的,這也帶來了很多不方便的地方,尤其是在使用stl容器的時候,如果我們可以往語句中傳入結構體,一些事情將會變得很簡單。
比如二分查詢,binary_crearch只能對陣列進行查詢,如果是結構體陣列的話,它會報錯。但很可惜,實際程式設計中,大部分時候操作物件是結構體陣列。
二分查詢結構體陣列的程式如下:
[cpp]view plain
copy
#include
#include
#include
using namespace std;
struct point
bool operator!=(const point b) const
bool operator<=(const point b) const
bool operator<(const point b) const
bool operator>=(const point b) const
bool operator>(const point b) const
}a[10002],now;
int main()
scanf("%d", &k);
for (i = 0; i <= k - 1; i++)
else
} return 0;
} a是結構體陣列,裡面包含元素elem,我們想按elem的值進行二分查詢。
過載運算子的格式如下:
bool operator 運算子 (const 結構體名稱 b) const
並要注意binary_search的第三個引數也要寫成結構體。
這樣就可以順利實現結構體陣列的二分查詢了。
過載的時候,如果你不知道stl內部使用了哪些運算子,就最好把上面六種運算子全部過載了,當讓,如果你知道了stl的內部執行原理,也可以只過載它內部使用了的運算子,或者只過載你想要改變的運算子。
比如優先佇列程式:
[cpp]view plain
copy
#include
#include
#include
#include
#include
using namespace std;
struct point
};
priority_queue q;
point create, now;
int n;
void clearqueue()
return;
} int main()
now.elem = 1;
q.push(now);
while (!q.empty())
else
} } printf("%lld\n", now);
} return 0;
} 我只想讓小的元素處於佇列頂端,那麼就可以只改變《的判斷方式,其他不改變,那麼就只過載了小於。
又比如,六數碼問題中,判斷達到目標的條件是結構體的六個元素分別相等。但結構體不能直接寫「==」號,於是有
[cpp]view plain
copy
#include
#include
#include
#include
using namespace std;
struct state
}s, now, temp, t;
bool vis[6][6][6][6][6][6];
queueq;
state alpha(state s)
state beita(state s)
void clearqueue()
return;
} int main()
q.pop();
temp = alpha(now);
if (vis[temp.a][temp.b][temp.c][temp.d][temp.e][temp.f] == false)
temp = beita(now);
if (vis[temp.a][temp.b][temp.c][temp.d][temp.e][temp.f] == false)
} if (flag == 1)
else
} return 0;
} 利用過載可以簡化**,和stl一起運用會產生很大的威力,並且最好了解stl內部的執行原理,以便能正確過載運算子。
結構體的運算子過載
1 定義結構體 structcurrency 2 過載io輸出操作,在結構體內部將輸入操作的過載定義為友元函式過載 friendostream operator ostream out,currency value 在結構體外部進行具體定義 ostream operator ostream out,...
結構體中運算子的過載
c 中,結構體是無法進行 這些操作的,這也帶來了很多不方便的地方,尤其是在使用stl容器的時候,如果我們可以往語句中傳入結構體,一些事情將會變得很簡單。比如二分查詢,binary crearch只能對陣列進行查詢,如果是結構體陣列的話,它會報錯。但很可惜,實際程式設計中,大部分時候操作物件是結構體陣...
優先佇列和結構體的運算子過載
自定義結構體是做題必須要學會的,而且經常需要用到自定義其排序規則。優先佇列也是,對於基本資料型別來說,不用自定義優先規則,但是對於自定義資料型別來說,確實是需要自己定義其內部的排序規則的。今天發現原來兩者的定義規則可以使用同一種方式來定義。struct node node int xx,int yy...