这是我的代码
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
ANSWER
正如@livingissuicide所建议的那样,问题是getSigma()
需要返回一个引用(即......常量,@ PhoenixX_2)。解释为什么它需要返回一个引用(为什么只是一个简单的副本还不够)是因为
问题是有两次调用getSigma,产生两个不同的向量。传递给sort的一对迭代器不是有效范围 - 两个迭代器指向不同的容器。
解释由@IgorTandetnik提供。
答案 0 :(得分:5)
getSigma()返回std :: vector&lt; char&gt;
确保你的getSigma()函数返回一个引用(std :: vector&lt; char&gt;&amp;)而不是副本!
答案 1 :(得分:0)
确保dfaVector
不为空。还要确保getSigma()
返回一些常量(引用)。