如何对std :: list< ..>进行排序

时间:2010-07-22 13:03:29

标签: c++

我有一个自定义类型的Elemtents列表:

std::list<CDataTransferElement*> m_list;

该类的定义如下:

    class CDataTransferElement
{
public:
    CDataTransferElement(void);
    ~CDataTransferElement(void);

    CString Name;
    double PercentValue;
    double MOLValue;
    int PhaseIndex;

};

我在m_list对象中有x个项目,必须通过新对象中的PhaseIndex变量进行排序(有哪种类型)。 最后我需要x个CDataTransferElement元素列表,其中每个列表只有具有相同PhaseIndex的元素。

我最好怎么做?

问候 camelord

4 个答案:

答案 0 :(得分:1)

遍历您的列表,将每个CDataTransferElement添加到存储在地图中的新列表。

std::map<int,std::list<CDataTransferElement*> > m;
for( std::list<CDataTransferElement*>::iterator i=m_list.begin(); i!=m_list.end(); ++i)
{
  m[ (*it)->PhaseIndex ].append( (*it) );
}

然后,您可以使用新的分隔列表循环遍历地图以执行任何操作。

for( std::map<int,std::list<CDataTransferElement*> >::iterator it = m.begin();
     it!=m.end();
     ++it )
{
  do_somthing_with_list( it->first, it->second );
}

答案 1 :(得分:0)

使用标题

它提供了std :: sort(std :: iterator begin,std :: iterator end)

http://www.cppreference.com/wiki/stl/algorithm/sort

答案 2 :(得分:0)

您可能需要使用自定义比较器。请参阅示例sort std::list case sensitive elements

答案 3 :(得分:0)

如果你想使用std :: sort,你可以重载运算符&lt;在你的班上 我认为如果你想随机访问,使用vector而不是list会好得多。