对包含struct的deque进行排序

Moh*_*ees 1 c++ deque

我想根据节点结构中包含的int g值对双端队列进行排序.我的程序结构是这样的:

struct node
{
    int x;
    int y;
    int g;  
};

deque<node> open;
Run Code Online (Sandbox Code Playgroud)

这是我正在尝试的排序功能,但它给出了垃圾值.请指导我:

deque<node> sort(deque<node> t)
{
    deque<node>::iterator it;
    int size= t.size();
    node te;
    for(int i=0; i<size; i++)
    {
        for(int j=0; j<size-i; j++)
        {
            if(t[j].g < t[j+1].g)
            {
                te.x = t[j].x;
                te.y = t[j].y;
                te.g = t[j].g;

                t[j].x = t[j+1].x;
                t[j].y = t[j+1].y;
                t[j].g = t[j+1].g;

                t[j+1].x = te.x;
                t[j+1].y = te.y;
                t[j+1].g = te.g;
            }
        }
    }

    for(it=t.begin();it!=t.end();it++)
    {   
        te = *it;
        cout<<te.x<<","<<te.y<<","<<te.g<<endl;
    }

    return t;
}
Run Code Online (Sandbox Code Playgroud)

Ant*_*vin 7

在以下情况下你会超出范围i == 0:你迭代jsize - 1包含,但随后j + 1 == size.

无论如何,有更简单,更快速的解决方案 - 只需使用std::sort:

std::sort(t.begin(), t.end(), [](const node& a, const node& b) { 
    return a.g > b.g;
});
Run Code Online (Sandbox Code Playgroud)