我試圖梳理與類型2D矢量:排序向量C++
vector<pair<char, double>> output;
我試圖從最高到最低的雙重價值排列並只顯示前5名。這是我我試圖做的:
sort(output.begin(), output.end());
但這種方式對我來說工作不正常。我究竟做錯了什麼?
我試圖梳理與類型2D矢量:排序向量C++
vector<pair<char, double>> output;
我試圖從最高到最低的雙重價值排列並只顯示前5名。這是我我試圖做的:
sort(output.begin(), output.end());
但這種方式對我來說工作不正常。我究竟做錯了什麼?
默認情況下,std::sort
將使用低於比較運算符用於容器的元件,其將使用char
第一然後double
執行點逐一比較。
您可以使用自己的排序函數/仿函數,基於對唯一double
元素訂單:
bool cmp(const std::pair<char, double>& lhs,
const std::pair<char, double>& rhs)
{
return lhs.second > rhs.second;
}
然後
std::vector<std::pair<char, double>> output = ....;
sort(output.begin(), output.end(), cmp);
我在獲取錯誤 – user977154
錯誤錯誤C3867:'CaesarCypher :: cmp':函數調用缺少參數列表;使用'&CaesarCypher :: cmp'創建一個指向成員 – user977154
@ user977154的指針,你做錯了! 'cmp'函數是一個非成員函數。 – juanchopanza
您需要在pair<char, double>
操作數之間編寫比較運算符。 http://en.cppreference.com/w/cpp/algorithm/sort
正如紫說,你可能要包括你自己的比較函數:
class compare { public: bool operator() (std::pair<char, int> const& p1, std::pair<char, int> const& p2) const { // perform logic here } } Predicate;
std::sort
使用operator <
的元素比較,並據此排序。它有之比較函子,我們可以包括這樣一個額外的可選參數:
std::sort(output.begin(), output.end(), Predicate);
注意,這也可以使用C++ 11的拉姆達來完成。
我不確定,但比較器不是一個具有簽名'bool(const value_type&,const value_type&)'的東西(函數,lambda,函子)?我認爲你應該寫'operator()'而不是'operator <' – Manu343726
@ Manu343726這就是這個樣子。 'std :: sort'將在內部調用'compare :: operator <'。 – 0x499602D2
mmmm不,不是可調用對象,您只定義了比較運算符。 – Manu343726
您有使用配對向量的原因嗎?換句話說,元素內部存儲的順序對你來說真的很重要嗎?如果沒有,你可能更好的方法是使用帶反向迭代器的map<double,char>
來獲得最後5個元素按double值排序。
你可能想要定義你自己的比較函子。 –
定義「工作不正常」。向我們展示代碼。 –
另一種可能性是......用一個雙字符對交換char-double對,然後直接對它進行排序...... extra + O(N)time這是無關緊要的,因爲排序是O(NlogN)和額外的O(N)內存...如果你負擔得起。 – 2017-11-28 00:36:44