2017-03-25 168 views
-5

我有一些問題,編譯這段代碼工作。我找不到錯誤。錯誤不是由於範圍或常量函數。我也嘗試將sort方法放在一個非常量函數中,併發生相同的錯誤。STD:排序不上向量

struct _Invoice { 
    unsigned int amm; 
    string id; 
}; 
. 
. 
.  
vector<_Invoice> Invoices; 
. 
. 
. 
bool invComp(const _Invoice &a, const _Invoice &b){ 
    return a.amm < b.amm; 
} 
unsigned int MedianInvoice (void) const{ 
    vector<_Invoice>tmpInvoices(Invoices); 
    sort(tmpInvoices.begin(), tmpInvoices.end(), invComp); 
    return (tmpInvoices.begin() + ceil((double)tmpInvoices.size()/2))->amm; 
} 

在此先感謝!

+2

你忘了告訴我們你的'invComp'函數,這是這裏最重要的一件事。你也忽略了說你看到了什麼錯誤,你的輸入是什麼,你的期望輸出是什麼,你實際得到了什麼,等等。我們需要一個[MCVE]來幫助你。 – ShadowRanger

+0

題外話:什麼是有關在C++標識符使用下劃線的規則?](http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in- ac-identifier)提示:你正在破壞它們。 – user4581301

+0

謝謝,我不知道這些規則。我只用了一兩個月的時間。 現在還有invCmp功能。 – totalolage

回答

2

  1.您需要提供invComp讓我們看看是否有什麼問題。

  2.對於此任務,您希望使用nth_element而不是sort

auto const n = static_cast<std::size_t>(std::ceil(tmpInvoices.size()/2.0)); 
std::nth_element(tmpInvoices.begin(), tmpInvoices.begin() + n, tmpInvoices.end(), invComp); 
return (tmpInvoices.begin() + n)->amm; 
+0

謝謝, 我完全忘了包含comp函數。它應該在那裏, 再次感謝您的幫助和遺憾。 – totalolage

+0

@FilipKalny:您還需要包含特定的錯誤/問題。那是什麼錯誤?比較功能看起來正確。 – Pixelchemist

+0

編譯器輸出很可笑,這就是爲什麼我沒有包含它,它必須處理sort函數的內部工作。 我現在發現了錯誤,我不知道方法和函數是兩個完全不同的東西,我的比較函數實際上是一種方法。 – totalolage