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

时间:2012-12-03 09:53:37

标签: c++ list stl compare containers

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

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

[...]

std::list<weightedVariable> tmp;

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

2 个答案:

答案 0 :(得分:8)

您可以将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();

答案 1 :(得分:0)

qlocale.cpp起,您也可以使用C++11代替定义比较函数或运算符:

Box

输出:

  

0.2
  0.4
  0.8

lambda expression