如何比较/排序包含自定义typedef的列表容器的元素?

Mod*_*ass 3 c++ containers stl compare list

我想使用std::listSTL容器能够对包含的项目应用订单.但是,我想要使用的项目是typedef由自定义类型和double表示权重的自定义组成.如何确保我可以根据元素的权重对结果列表进行排序?

typedef std::pair<linearVariable*, double> weightedVariable;
Run Code Online (Sandbox Code Playgroud)

[...]

std::list<weightedVariable> tmp;
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能确保列表根据对的第二部分(权重)进行排序?有没有更好的方法来维护自定义类型的顺序?在我的情况下,重量不是的属性linearVariable,但它可以计算.

jua*_*nza 8

您可以使用std::list::sort自定义比较功能:

inline bool comp(const weightedVariable& lhs, const weightedVariable& rhs)
{
  return lhs.second < rhs.second;
}

tmp.sort(comp);
Run Code Online (Sandbox Code Playgroud)

另一种选择是提供bool operator<和使用std::list::sort():

inline bool operator < (const weightedVariable& lhs, const weightedVariable& rhs)
{
  return lhs.second < rhs.second;
}

tmp.sort();
Run Code Online (Sandbox Code Playgroud)