我有一個比較器函式,可以比較兩個字串,這些字串表示沒有前導零的數字,例如“123”或“5”。
bool comp(string s1,string s2){
if(s1.size()!=s2.size())
return s1.size()<s2.size();
int i=0;
while(i<s1.size() && s1[i]==s2[i])
i ;
if(i==s1.size())
return true;
return s1[i]<s2[i];
}
除了字串 nums 向量外,我還使用了 sort() 函式,如下所示:
sort(nums.begin(),nums.end(),comp);
這個函式適用于這個向量:
{"5","5","5","5","5","5","5","5","5","5","5","5","5","5","5","5"}
但是如果我在向量中再添加一個“5”,它會拋出這個:
拋出“std::length_error”實體后呼叫終止
what(): basic_string::_M_create
這里發生了什么?
uj5u.com熱心網友回復:
您的比較器不尊重嚴格的弱排序,
相等性檢查
if (i == s1.size())
return true;
應該
if (i == s1.size())
return false;
或者,使用<tuple>設施確保嚴格的弱排序:
bool comp(const std::string& s1, const std::string& s2)
{
return std::forward_as_tuple(s1.size(), s1)
< std::forward_as_tuple(s2.size(), s2);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/312308.html
