所以,我有一個任務,寫一個程序來測試不同排序算法的速度,其中一個是很好的qsort
。我需要傳遞一個比較器給它,但不是它期望的那個,但是一些布爾值a-la std::less
,而且我知道要使用它以便qsort接受它,我需要實際上通過它,如less(b, a) - less(a,b)
--- this方式,它有[-1; 1]
的範圍,併產生我所需要的。如何將比較器a-la std :: less傳遞給C風格的Qsort?
問題是這樣的:我不知道如何實際做到這一點!我試圖使用lambda ---和(因爲我需要捕獲比較和qsort不能處理這個)失敗。我試圖創建另一個函數比較我轉換爲qsort
的:
int make_comparator(const void* a, const void* b) {
return (int)comp(*(int*)b, *(int*)a) - (int)comp(*(int*)a, *(int*)b);
}
但我對如何實際的comp
傳遞給它不知道(因爲我不能只寫qsort(..., make_comparator(comp, a, b))
,可以嗎?)。我試圖使用模板來通過comp
,但無法弄清楚如何。
因此,我已經掙扎了一個小時,而且我也沒有接近解決方案。什麼是正確的方法來做到這一點?
您必須使用非捕獲lambda或普通指針指向**非** - 成員函數,就是這樣。 –
@JoachimPileborg,非捕獲的lambda無法使用傳入我的函數的'comp'參數,而這又會使用'qsort',所以這不是選項。 非成員函數也不是一個選項,因爲,同樣,我想不出一種方法來傳遞我的'comp'到它。 我錯過了什麼嗎? – Akiiino
查找'qsort_r'。不是標準的,但描述會告訴你更多關於你想要做什麼。 –