[英]Segmentation Fault: C++ sort an string vector with lambda comparator
int main() {
vector<string> v(100, "0");
auto comp = [](const string& first, const string& second)->bool {
return first.compare(second) <= 0;
};
sort(v.begin(), v.end(), comp);
for(auto s : v) {
cout<<s<<endl;
}
return 0;
}
上面的c ++代碼在g ++ v4.9.2中出現了分段錯誤。 它是如此有線。 誰知道發生了什么事?
您的比較功能無效。 它在不自反性( comp(x,x)永遠不為true )和不對稱性( 如果comp(x,y)為true時,comp(y,x)必須為false )都失敗,兩者都是嚴格的一部分std::sort
為其比較器所需的弱排序 。 operator<
或operator>
滿足此要求。 但是operator<=
和operator>=
不會。
如果將比較功能更改為此:
auto comp = [](const string& first, const string& second)->bool {
return first.compare(second) < 0;
};
它會工作。 當然,這在功能上與默認設置相同,因此您可以執行以下操作:
sort(v.begin(), v.end());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.