看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: Win10, Linux, ...) win10 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) vc++ 問題(Question): 我今天有兩種資料群AB要分別依照他們的priority用heap做排班 兩種資料用struct大概這樣 struct A ( (typeA1 data1) , ... , (int p) ) struct B ( (typeB1 data1) , ... , (int p) ) (除了各自都有權重其他資料型態都不盡相同 我想說做一個heap的範本方便處理這兩種資料群的排班,如下: template <class type> class max_heap{...} private中有陣列作為heap,如: type data[heap_size] 那像是insert大致會像是下面這樣: template <class type> void max_heap<type>::insert(type _data){ data[current_size+1]=_data; current_size++; ... ... 然後根據"data[current_size].p"去做heap調整 } 把 範本預設的資料型態 預想成 含整數p的struct 然後操作,原本以為會出問題的 不過編譯執行好像都可以,然後查了一下別人用template的一些例子 都是放很單純的int...之類的,沒看過把struct定義的放進去用 我想問的只是這是個好方法嗎? 還是通常都是針對各種資料去建立各自的heap class -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.160.103.145 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1532761683.A.9ED.html
ilikekotomi: 有不同struct這樣寫沒錯 C++有heap的演算法 07/28 16:12
ilikekotomi: 應該可以跟vector一起用 不用自己寫heap的實作 07/28 16:12
ilikekotomi: 只要你的struct可以比較大小就可以用了 07/28 16:14
LPH66: C++ 的 template 滿常這樣假設 template class 型別具有 07/28 19:59
LPH66: 某些特定的欄位或 typedef 或等等 07/28 19:59
LPH66: 由於實際程式都是在(以各種方法)給定所有型別之後才會編譯 07/28 20:00
LPH66: 因此只要給定之後程式合法那就沒問題了 07/28 20:01
LPH66: 相對的如果沒有 (例如此例中結構中不含 p 但卻 .p 存取) 07/28 20:02
LPH66: 那就會出現普通的編譯錯誤 07/28 20:02
我其實也不是只要用heap 我是想把問題簡化到呈現我要重點而已啦XD 有把疑惑簡單表達出來就好了 我也大概懂了 謝謝^^ ※ 編輯: TMDTMD2487 (118.160.103.145), 07/28/2018 21:33:51