如何根据struct的某个字段对struct指针列表进行排序?

xnl*_*l96 1 c++ visual-c++

我有这个代码:

struct nod
{
    nod *vCap;
    int vCost;
    char vInfo;
}; 

list<nod*> vList;

for (int i = 9; i >= 0; i--) 
{
    nod *vTmp;
    vTmp->vCost=i;
    vTmp->vInfo='a';
    vList.push_back(vTmp);
}
Run Code Online (Sandbox Code Playgroud)

如何按vCost值对列表进行排序?

Mik*_*our 5

您需要一个自定义比较器来比较您感兴趣的字段:

struct compare_nod_by_cost {
    bool operator()(nod const * a, nod const * b) {
        return a->vCost < b->vCost;
    }
};
Run Code Online (Sandbox Code Playgroud)

然后你可以提供它作为比较器list::sort:

vList.sort(compare_nod_by_cost());
Run Code Online (Sandbox Code Playgroud)

在C++ 11中,您可以将其压缩为lambda:

vList.sort([](nod const * a, nod const * b) {return a->vCost < b->vCost;});
Run Code Online (Sandbox Code Playgroud)

(请注意,您几乎肯定希望在列表中存储对象而不是指针;在这种情况下,将比较器的指针参数更改为引用).