所以我有一個數組(0 - n),保存值,我希望std :: set用於它的排序。 該陣列是unsigned int 成本 [n]。爲什麼我不能用謂詞的實例來構造std :: set,但是我可以指定一個構建的std :: set嗎?
我用下面的仿函數此排序:
struct ProxySorter {
ProxySorter(const unsigned* arr) : proxy_array(arr) {}
bool operator()(const unsigned& a, const unsigned& b) const {
return proxy_array[a] < proxy_array[b];
}
const unsigned* proxy_array;
};
所以這裏的問題... 當我構建了一套,這是合法的:
std::set<unsigned, ProxySorter> node_queue = std::set<unsigned, ProxySorter>(ProxySorter(cost));
我沒有得到任何錯誤,並且一切按預期工作。但這似乎被黑了,馬虎。
然而,這顯然是違法的:
std::set<unsigned, ProxySorter> node_queue(ProxySorter(cost));
試圖做到與ProxySorter(成本)構造就造成了一堆錯誤,說這樣的東西對每個組成員電話:
error: request for member erase in node_queue, which is of non-class type std::set<unsigned int, ProxySorter>(ProxySorter)
常規施工有什麼問題?爲什麼分配工作?這裏有什麼不同,我錯過了?任何幫助非常感謝,謝謝。
哦,對於問題的標題很抱歉,我真的不知道該怎麼稱呼它。
爲什麼,因爲否則它被解析爲函數聲明?哇。 –
哇。那麼我從來不會想到這一點。 –
@John:是的,看到我的小編輯和鏈接。 – Xeo