[問題] 關於make_heapㄧ些問題

看板C_and_CPP (C/C++)作者 (路邊小人物)時間16年前 (2009/10/12 00:00), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
我有一個程式原本是用priority_queue 搭配一個class的operator對priority_queue做compare從有小到大做排序 但是priority_queue的menber funtion沒有針對其中一個element做移除 如erase或remove 所以我打算改用make_heap搭配vector來做 下面是以我的程式經過簡化的小例子: vector<int> coll; vector<int>::iterator t; coll.push_back(1); coll.push_back(2); coll.push_back(100); coll.push_back(11); coll.push_back(25); sort_heap(coll.begin(), coll.end()); cout<<"initial:"; copy(coll.begin(), coll.end(), ostream_iterator<int>(cout, " ")); cout<<endl; cout<<"after sort:"; sort_heap(coll.begin(), coll.end()); //排列heap copy(coll.begin(), coll.end(), ostream_iterator<int>(cout, " ")); cout<<endl; t=find(coll.begin(), coll.end(),11); //移除元素 coll.erase(t); cout<<"after erase:"; copy(coll.begin(), coll.end(), ostream_iterator<int>(cout, " ")); ----------------------------------------------------------------------- 輸出: initial: 2 1 100 11 25 after sort: 1 11 25 100 2 after erase: 1 25 100 2 我現在的問題是 1.為什麼after sort之後2並沒有做排序呢? 2.使用sort_heap裡面東西除了放<int>之外,可以用其他struct嗎? 例如我把vector的塞ㄧ些結構如 struct node{ int id; int number; }; vector<node> coll; 下面這句語語法 我改成這樣還是不會過 應該都是(int,int)了 sort_heap(coll.front().ID, coll.back().ID); 而下面這兩句就不知道要怎麼改了 t=find(coll.begin(), coll.end(),11); coll.erase(t); 3.make_heap到底能否使用自訂結構而非int 自己選擇一個operator排序 而且能宣告一個新的heap呢 例如像priority_queue這樣: std::priority_queue<node,vector<node>,排序operator>new_heap; 感謝看完 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.228.174.223
文章代碼(AID): #1AqW46d4 (C_and_CPP)
文章代碼(AID): #1AqW46d4 (C_and_CPP)