C++ C++;排序长德克
我试图对成对的dequeC++ C++;排序长德克,c++,sorting,std,C++,Sorting,Std,我试图对成对的dequedeque sortDValues的前半部分进行排序 struct data { int dValue; int index; }; < > >代码> dValue/Cord>使用lambda表达式< /p>的C++函数 sort(sortDValues.begin(), sortDValues.begin() + partASize - i, [](data const &a, data const &b) { return
deque sortDValues
的前半部分进行排序
struct data {
int dValue;
int index;
};
< > >代码> dValue/Cord>使用lambda表达式< /p>的C++函数
sort(sortDValues.begin(), sortDValues.begin() + partASize - i,
[](data const &a, data const &b) { return a.dValue > b.dValue; });
这种方法在大多数情况下运行良好,但在某些特殊情况下,最终程序会失败。我发现问题出在sort
函数中,但是我不知道为什么
我不确定,它是否与填写此出列有任何共同之处
deque<data> sortDValues;
for(number n : indices)
{
if(perm[n] >= partASize)
sortDValues.push_back(dValues[n]);
else
sortDValues.push_front(dValues[n]);
}
deque sortdvalue;
用于(编号n:索引)
{
if(perm[n]>=partASize)
sortDValues.push_back(dValues[n]);
其他的
sortDValues.push_front(d值[n]);
}
我可以给出这个问题的一个具体例子:第一个数字是索引
,第二个是d值
:
提前感谢您的回答,我无法找出问题所在。您是否确保
sortDValues.begin()+partASize-I
介于begin()
和end()
之间?@bolov是的,我确信,这一要求是正确的met@E.Brownstd::sort
没有问题。唯一可能出错的是1)您提供的迭代器无效,2)排序条件不符合严格的弱顺序,或3)您填充容器的数据具有未初始化/不确定值的数据。您从未向我们展示过1)(即使您声称它是有效的),而且您还没有证明第3项)。@E.Brown还声称您在std::sort
中的迭代器是有效的,这是不够的。确保它有效:size\u t lastElement=std::min(sortDValues.size(),partASize-i);std::sort(sortDValues.begin(),sortDValues.begin()+lastElement,…)
类似于确保您不会越界的东西。@PaulMcKenzie我尝试过确保,无论这些条件是否满足。对于1)如果(lastElement<1),您是否可以确保sortDValues.begin()+partASize-i
介于begin()
和end()
之间?@bolov是的,我确信,这一要求是正确的met@E.Brownstd::sort
没有问题。唯一可能出错的是1)您提供的迭代器无效,2)排序条件不符合严格的弱顺序,或3)您填充容器的数据具有未初始化/不确定值的数据。您从未向我们展示过1)(即使您声称它是有效的),而且您还没有证明第3项)。@E.Brown还声称您在std::sort
中的迭代器是有效的,这是不够的。确保它有效:size\u t lastElement=std::min(sortDValues.size(),partASize-i);std::sort(sortDValues.begin(),sortDValues.begin()+lastElement,…)
类似于确保您不会越界的东西。@PaulMcKenzie我尝试过确保,无论这些条件是否满足。如果(lastElement<1)不能,则使用if