結構體中運算子的過載

2021-07-11 10:24:53 字數 2061 閱讀 9375

c++中,結構體是無法進行==,>,<,>=,<=,!=這些操作的,這也帶來了很多不方便的地方,尤其是在使用stl容器的時候,如果我們可以往語句中傳入結構體,一些事情將會變得很簡單。

比如二分查詢,binary_crearch只能對陣列進行查詢,如果是結構體陣列的話,它會報錯。但很可惜,實際程式設計中,大部分時候操作物件是結構體陣列。

二分查詢結構體陣列的程式如下:

#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的內部執行原理,也可以只過載它內部使用了的運算子,或者只過載你想要改變的運算子。

比如優先佇列程式:

#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;

}

我只想讓小的元素處於佇列頂端,那麼就可以只改變《的判斷方式,其他不改變,那麼就只過載了小於。

又比如,六數碼問題中,判斷達到目標的條件是結構體的六個元素分別相等。但結構體不能直接寫「==」號,於是有

#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內部的執行原理,以便能正確過載運算子。

結構體運算子過載

c 中,結構體是無法進行 這些操作的,這也帶來了很多不方便的地方,尤其是在使用stl容器的時候,如果我們可以往語句中傳入結構體,一些事情將會變得很簡單。比如二分查詢,binary crearch只能對陣列進行查詢,如果是結構體陣列的話,它會報錯。但很可惜,實際程式設計中,大部分時候操作物件是結構體陣...

結構體的運算子過載

1 定義結構體 structcurrency 2 過載io輸出操作,在結構體內部將輸入操作的過載定義為友元函式過載 friendostream operator ostream out,currency value 在結構體外部進行具體定義 ostream operator ostream out,...

優先佇列和結構體的運算子過載

自定義結構體是做題必須要學會的,而且經常需要用到自定義其排序規則。優先佇列也是,對於基本資料型別來說,不用自定義優先規則,但是對於自定義資料型別來說,確實是需要自己定義其內部的排序規則的。今天發現原來兩者的定義規則可以使用同一種方式來定義。struct node node int xx,int yy...