这是我的代码
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()
需要返回一个引用(即某个常量,@PhoenixX_2)。为什么它需要返回一个引用(以及为什么 仅仅一个简单的副本是不够的)的解释是因为
问题是对 getSigma 的两次调用,产生了两个不同的向量。传递给 sort 的一对迭代器不是有效范围 - 这两个迭代器指向不同的容器。
解释由@IgorTandetnik 提供。