c++在用set和multiset時遇到的一個bug

今天在寫一個程序時用到了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; 
    }
};




發佈了425 篇原創文章 · 獲贊 40 · 訪問量 71萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章