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)永远不为真)和非对称性(如果comp(x,y)为true,则comp(y,x)必须为false)上都失败,两者都是strict weak ordering的一部分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());

关于c++ - 段错误:C++使用Lambda比较器对字符串 vector 进行排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39433709/

10-11 22:41
查看更多