我們都知道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 ...