結構體運算子過載

2022-07-17 18:21:14 字數 2368 閱讀 9644

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...