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

2021-06-25 23:01:17 字數 1632 閱讀 2332

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

——by mh1026

www.libcl.cn

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

Map以自定義類做為鍵值

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