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

typedef std::pair<linearVariable*, double> weightedVariable;

[...]
std::list<weightedVariable> tmp;

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

最佳答案

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

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

tmp.sort(comp);

另一种选择是提供bool operator<并使用std::list::sort():
inline bool operator < (const weightedVariable& lhs, const weightedVariable& rhs)
{
  return lhs.second < rhs.second;
}

tmp.sort();

10-04 12:34