Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;排序长德克_C++_Sorting_Std - Fatal编程技术网

C++ C++;排序长德克

C++ 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
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.Brown
std::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.Brown
std::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