在c++中,map是典型的關聯容器或者叫對映容器(associative container),其中的每乙個元素都是由key-value這樣成對出現的內容組成的,比如學號和學生之類具有一一對應關係的情形,學號可以作為key,學生物件可以作為key所對應的value。很顯然這種情況下的key只有乙個值,但是,在實際工作中,我們可能會經常需要使用多個值組合起來作為key的情況,比如我們要按照學生的視力和身高進行排序,以決定學生的座位排在前面還是後面,而且還是假定要用map來解決這樣的問題(當然,這樣的問題有很多其它的解決辦法),那應該怎麼辦呢?
(1) 單值作為key的情形
我們知道map在預設狀態下,其資料是按照key的公升序進行排列的。假定我們有乙個student類,宣告如下:
[cpp]view plain
copy
class
student
intget_id()
string get_name()
float
get_eyesight()
float
get_height()
float
get_chinese()
float
get_english()
float
get_math()
};
那麼下面的程式:
[cpp]view plain
copy
intmain(
intargc,
char
**argv)
return
0;
}
就會按照學號的公升序給出輸出:
1 andrew
2 bob
3 chris
4 dudley
這是預設的情形,如果要將學生的姓名按照學號的降序輸出,那麼僅需將上面main函式中的
map stu_map;改為
map > stu_map;
以及map::iterator iter;改為
map >::iteratoriter;
即可。其實,map stu_map;這是一種預設的情況,它和
map > stu_map;是一樣的。
(2) 多值組合作為key的情形
現在,我們來看看多個值組合起來作為key的情況,為此,我們需要為key定義乙個類,如下:
[cpp]view plain
copy
class
key
friend
bool
operator < (constkey&,
const
key&);
};
bool
operator < (constkey& key1,
const
key& key2)
再修改main函式如下:
[cpp]view plain
copy
intmain(
intargc,
char
**argv)
return
0;
}
那麼輸出結果為:
1.1 163.4 3 chris
1.1 170.2 4 dudley
1.5 166.6 2 bob
1.5 173.2 1 andrew
從上面的輸出,我們可以很明顯地看到,是按照視力公升序和公升高公升序輸出的,另外三種可能的排序情況,也在類key的操作符「<」的過載函式中,用注釋的形式給出了。
(3)結論
1.通常我們不用stl algorithm中的sort函式,來對乙個map進行排序,而對vector的元素進行排序則可以很方面地使用sort函式;
2.多值組合作為key的情況,需要我們自己定義乙個key類,並在該類中過載操作符「<」。
附兩個值作為key的情況之完整的實驗**如下:
[cpp]view plain
copy
#include
#include
#include
using
namespace
std;
class
key
friend
bool
operator < (constkey&,
const
key&);
};
bool
operator < (constkey& key1,
const
key& key2)
class
student
intget_id()
string get_name()
float
get_eyesight()
float
get_height()
float
get_chinese()
float
get_english()
float
get_math()
};
intmain(
intargc,
char
**argv)
return
0;
}
戴爾押寶iSCSI,由低到高組合成型
戴爾 dell 是較早接受sas技術的主流儲存廠商之一,2006年已推出採用sas硬碟驅動器的sas直連儲存 das 系統powervault md3000。一年之後,主機連線改用iscsi的powervault md3000i問世。2008年1月,emc也在替代低端ax150和cx300系統的cl...
如何將多個C語言模組組合成乙個程式
一般來說,我們編制的c語言源程式都是放在乙個擴充套件名為.c的檔案中,這對乙個較簡單的程式是合適的,但對於大型專案就不合適了,其一,大專案往往由多人合作完成,大家都來 操作同乙個檔案極易出錯 其二,大檔案的編譯 除錯都極為複雜 其三,如果兩個程式中都要用到同乙個自定義的函式,此函式須從一檔案移動到另...
將兩個列表組合成乙個字典 join 函式
list name tall list1 liyue boy 190cm dict zip list,list1 函式 string.join python中有join 和os.path.join 兩個函式,具體作用如下 join 連線字串陣列。將字串 元組 列表中的元素以指定的字元 分隔符 連線生...