[問題] 關於make_heapㄧ些問題
我有一個程式原本是用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
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章