这是我的代码

bool cmp (const char &a, const char &b)
{
    if ((int) a == (int) b)
    {
        return false;
    }

    if ((int) a > (int) b)
    {
        return false;
    }
    return true;
}
std::sort(
        dfaVector.at(0).getSigma().begin(),
        dfaVector.at(0).getSigma().end(),
        cmp);


getSigma()返回std::vector<char>,它们不为空-我检查了它。我可以根据需要从gdb发布堆栈跟踪。我正在使用g ++ 4.8,OS Mint 14

回答

正如@livingissuicide所建议的那样,问题在于getSigma()需要返回引用(即sth常量@ PhoenixX_2)。之所以解释为什么它需要返回一个引用(以及为什么仅仅一个简单的副本就不够)是因为


  问题是有两次调用getSigma的操作,产生两个不同的向量。传递给sort的一对迭代器不是有效范围-两个迭代器指向不同的容器。


说明由@IgorTandetnik提供。

最佳答案

getSigma()返回std :: vector


确保您的getSigma()函数返回引用(std :: vector &)而不是副本!

10-06 12:59