關於set或map的key使用自定義型別的問題

2021-07-12 04:33:47 字數 1026 閱讀 9386

我們都知道set或map的key使用自定義型別時必須過載《關係運算子

但是,還有乙個條件,所呼叫過載的小於操作符,使用的物件必須是const

而物件呼叫的方法也必須是const的

1 #include

2 #include

4 #include

7 using namespace std;

8

9 class point;

12 int get_x()const

15 int get_y()const

18 private:

19 int x;

20 int y;

21 };

22

23 inline bool operator<(const point &p1, const point &p2)

26

27 int main(int argc, const char *argv)

28

這樣的是正確的,沒有問題

1 #include

5 #include

7 using namespace std;

89 class point;

12 int get_x()

15 int get_y()

18 inline bool operator<(point &p1,point &p2)

21 private:

22 int x;

23 int y;

24 };

2526

27 int main(int argc, const char *argv)

28

而這樣的,在編譯時會出現很多相關的編譯錯誤

出現這樣的原因是,在map或set使用時,它們會自動的呼叫小於操作符來建立底層的紅黑樹

但是這裡有乙個條件就是在呼叫的過程中,key是不允許改變的,但是如果你宣告為non-const

那麼它的值可能會被改變,所以編譯會出錯。

map 對key 或 value排序

按key排序 我們借助map提供的引數介面,為它指定相應compare類,就可以實現對map按key排序,是在建立map並不斷的向其中新增元素的過程中就會完成排序。該如何實現map的按value排序呢?第一反應是利用stl中提供的sort演算法實現,這個想法是好的,不幸的是,sort演算法有個限制,...

C 類或結構作為map的key值

只有過載 的類或者結構才能作為map的key值。string可以作為key值是因為string過載了 如果不過載 會提示如下錯誤 error c2676 二進位制 const c 不定義該運算子或到預定義運算子可接收的型別的轉換 include include using namespace std...

Map和Set簡單使用

map 和set的底層就是紅黑樹,map是k,v模型,而set是k模型。以上就是map的內部實現的成員函式,構造,插入刪除,等。map作為k,v模型,可以有很多用途,比如實現乙個字典。map實現乙個字典 include using namespace std include include int ...