2015-12-04 195 views
2

我從這個結構中創建數組項:從陣列到優先級隊列

struct ks{ 
    int cap; 
    int val; 
}; 

陣列被命名爲項目,包含項目的數量

items = new ks[quantity]; 


我希望把他們在優先級隊列 - 這基本上意味着對其進行排序。
這是我比較功能:

struct itemsCompare{ 
    bool operator() (const ks &item1, const ks &item2){ 
     if (item1.val/item1.cap > item2.val/item2.cap) return true; 
     return false; 
    } 
}; 

應該如何創造這個隊列的樣子?

priority_queue <ks, What should I put here?, itemsCompare> comparedItems; 
for(int i=0; i<quantity; i++) comparedItems.push(items[i]); 

我知道,那個模板需要有vector作爲容器。我應該如何修改代碼才能使其工作?我知道我可以在聲明優先級隊列之前將項目放入向量中,但我很好奇是否有辦法用數組來完成它。

+2

戴上'的std ::矢量'那裏。 –

+0

也請製作一個小巧簡單的程序來評估您建議的分割表情,並確保它們的行爲符合您的要求。 –

+2

並使函數調用運算符重載'const'。 –

回答

1

回答了一個問題,問道:

std::priority_queue <ks, std::vector<ks>, itemsCompare> comparedItems; 

然而,問題有一些問題沒有直接問。首先,它是不受控制的物質的運動分工:)。如果你除以0會發生什麼?

二。你用整數除整數。這個結果總是整數,不知何故我懷疑這是你想要的。

+0

構建代碼後,我收到了一些奇怪的錯誤,如'未定義的引用',並有我的比較功能。這個比較有些問題。 – DzikiChrzan

+1

在此處發佈整個錯誤。 – SergeyA

+0

**/usr/include/C++/5.1.1/bits/predefined_ops.h:144:錯誤:對'branchandbound :: itemsCompare :: operator()的未定義引用(branchandbound :: ks const&,branchandbound :: ks const&) '** - branchandbound是我的班級 – DzikiChrzan

1

從數組創建std::priorty_queue可以使用

std::priority_queue <ks, std::vector<ks>, itemsCompare> comparedItems(items, items + quantity);