C STL中set是如何判斷兩個結構體相等的?

時間 2021-06-04 10:50:29

1樓:「已登出」

set - C++ Reference

Internally, the elements in a set are always sorted following a specific strict weak ordering criterion indicated by its internal comparison object (of type Compare).

set 的內部比較預設用的是 operator<,並要求嚴格弱序(strict weak ordering),當且僅當 !(a

2樓:吳獻策

這個問題其實是這樣。

set內部的實現是紅黑樹。如果是int, char這些資料型別,都已經被定義好了 comparable 的屬性了。所以是直接呼叫 std:less 的比較函式。

但是如果是結構體。std:less 沒有過載結構體,要是不寫乙個 comparable 函式給結構體的話,編譯是會報錯的。

就像這樣:

未定義 comparable

編譯報錯

報錯資訊

報錯資訊就是沒有定義 _Compare 。所以 Set 用結構體是一定要來乙個 Compare 的。

題主既然能編譯成功還過了樣例。題主應該也定義了。 說實話我感覺應該是你的 Compare 函式寫錯了。。

set 插入資料的需要去重。其實插入資料其實要做兩步。要呼叫兩次 Compare 。一次是去重,一次是內部紅黑樹的資料結構需要比較大小。

將a作為左運算元,b作為右運算元,呼叫比較函式,並返回去重結果。返回的是 bool ,就是該不該插入的意思。相同,不該插入,返回false;不相同,應該插入,返回true。

如果返回false,表示不該插入,跳過第二步。

將a作為左運算元,b作為右運算元,呼叫比較函式,並返回大小的比較結果。

簡化一下,最後形式應該是這樣差不多。當然你過載()運算子也完全ojbk。

如何判斷兩個女生是同性情侶還是普通朋友?

瞎寫一點吧 第一,比如身邊的朋友們都覺得你倆是一對,我有個朋友甚至跟我說,你倆cp感好強,另乙個朋友說,你們知道你們的相處模式跟男女朋友有什麼區別嗎 乙個是出了櫃的朋友,乙個是覺得沒必要對她出櫃的直女朋友 第二,她們會坐大腿,會親親,而且是有一方害羞的那種,害羞的是彎的更厲害的。第三,乙個女生會無微...

籃球比賽中,如下列兩個情形,如何判斷阻擋犯規還是帶球撞人?

車狗CarDog 肯定是防守方犯規,另外補充下,不能因為人家衝的狠,把防守人撞倒,就判進攻犯規。因為這次犯規,是防守方造成的啊!這不能是誰倒了誰有理。只要動作足夠規範,用多大勁兒都沒事。 Nico 看題目描述應該不用貼規則了 判斷誰犯規,最根本的問題是,誰造成接觸和誰對接觸負責。規則中關於判斷一起阻...

如何判斷一組資料來自兩個樣本?

yyyy xxx 打擾。偶然搜尋到了這個一年多前的帖子,也正好有賬號就回一下。如果題主已經找到解決方法或不再關心這個問題的話請無視。個人認為考慮聚類clustering比統計檢驗合適。即 如果 來自多個樣本 那麼可以聚出多個 差異顯著的 類。K means或Gaussian Mixture Mode...