map以自定義型別當Key(鍵值)

2021-06-21 02:22:52 字數 1571 閱讀 6017

今天,在公司的群裡有人問及關於map的鍵值能www.libcl.cn否使用自定義型別(類或者結構)。當時我也不清楚,所以回來學習一下。

關於map的定義:

namespace

std

第乙個template引數被當做元素的key,第二個template引數被當作元素的value。map的元素型別key和t,必須滿足以下兩個條件:

1.key/value必須具備assignable(可賦值的)和copyable(可複製的)性質。

2.對排序準則而言,key必須是comparable(可比較的)。

第三個template引數可有可無,用它來定義排序準則。這個排序準則必須定義為strict weak ordering。元素的次序由它們的key決定,和value無關。排序準則也可以用來檢查相等性:如果兩個元素的key彼此的都不小於對方,則兩個元素被視為相等。如果使用未傳入特定排序準則,就使用預設的less排序準則——以operator《來進行比較。

所謂「排序準則」,必須定義strict weak ordering,其意義如下:

1.必須是「反對稱性的」。

2.必須是「可傳遞的」。

3.必須是「非自反的」。

按照定義的要求:

我們有兩種方法以自定義型別當key:

1.為自定義型別過載operator<,map的第三個引數為預設仿函式less。

例子:#include 

#include 

#include 

using

namespace

std;

class

test

;bool

test::operator<(

const

test& a)

const

}int

main()

2.不使用map的第三個引數為預設仿函式less,自己編寫乙個比較仿函式。

#include 

#include 

using

namespace

std;

struct

keyofmap

;struct

mymapfunctor

};int

main()

{maptest;

keyofmap temp1;

keyofmap temp2;

temp1.firstofkey = 1;

temp1.secondofkey = 1;

temp2.firstofkey = 2;

temp2.secondofkey = 2;

test.insert(make_pair(temp1, 

"first"

));test.insert(make_pair(temp2, 

"second"

));map::iterator begin = test.begin();

cout << begin->first.firstofkey << begin->first.secondofkey << begin->second << endl;

return1;}

map以自定義型別當Key(鍵值)

map以自定義型別當key 鍵值 by mh1026 www.libcl.cn 今天,在公司的群裡有人問及關於map的鍵值能www.libcl.cn否使用自定義型別 類或者結構 當時我也不清楚,所以回來學習一下。關於map的定義 namespace std 第乙個template引數被當做元素的ke...

map以自定義型別當Key(鍵值)

map以自定義型別當key 鍵值 by mh1026 www.libcl.cn 今天,在公司的群裡有人問及關於map的鍵值能www.libcl.cn否使用自定義型別 類或者結構 當時我也不清楚,所以回來學習一下。關於map的定義 namespace std 第乙個template引數被當做元素的ke...

Map以自定義類做為鍵值

map在stl中的定義 template class alloc alloc 第乙個引數key是關鍵字型別 第二個引數t是值型別 第三個引數compare是比較函式 仿函式 第四個引數是記憶體配置物件 map內部儲存機制實際是以紅黑樹為基礎,紅黑樹在插入節點時,必須依照大小比對之後在乙個合適的位置上...