簡體   English   中英

分段錯誤:C ++使用Lambda比較器對字符串向量進行排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM