今天在寫一個程序時用到了set和multiset,因爲我需要讓其中的元素對降序排列,所以寫了一個functor,爲圖省事,我只比較了pair中首個元素如下:
struct cmp
{
bool operator()(pair<int, int> a, pair<int, int> b)
{
return a.first > b.first;
}
};
然後噩夢就開始了!剛開始我用的是set, 在我往set裏面插入元素的時候居然沒有成功.我知道set只能保存不同的元素,但是我的pair對中第二個元素是不一樣的,找了將近一個小時打印各種數據都沒發現錯在哪裏.然後下樓取拿了一盒牛奶,看到冰箱裏還有邱聰的雞爪,就啃着一個上樓了.我邊吃邊看代碼,忽然想到在比較函數上好像有問題,如果首元素相等那麼他就不會比較第二個元素了,好像就在插入的時候無法找到一個合適的位置插入就默認相等了,所以就放棄插入了,坑爹啊!所以改了一下比較函數就OK了.
struct cmp
{
bool operator()(pair<int, int> a, pair<int, int> b)
{
return a.first == b.first? a.second<b.second: a.first > b.first;
}
};