包含结构的矢量的排序

时间:2011-04-27 13:28:01

标签: c++

我试图对结构的矢量进行排序。以下是我的代码。我无法正确排序......任何人都可以帮助我......?我需要根据mmNo.Sorry排序...我错过了部分代码...

typedef struct MMInfo
{
  std :: string strMmNo;
  std :: string strMmName;
  std :: string strMmsPlace;
  std :: string strMmAdd;
  std :: string strMmPh;

  MMInfo(const std::string& mmNo,
         const std::string& mmName,
         const std::string& mmPlace,
         const std::string& mmAdd,
         const std::string& mmPh) : stringValue(mmNo,),stringValue(mmName),
                                    stringValue(mmPlace),stringValue(mmAdd),
                                    stringValue(mmPh) {}

  bool operator < (const MMInfo& str) const
  {
    return (mmNo < str.mmNo);
  }

} MMInfo;

std::vector < MMInfo > mmlist;
MMInfo mmInfo = {"", "", "", "", ""};

mmInfo.strMmNo = "3452132";   //actually , i have used a loop to get it from the user
mmInfo.strMmName="Peter";
mmInfo.strMmPlace="TCR";
mmInfo.strMmAdd="Street 453";
mmInfo.strMmPh="8587556587";

mmlist.push_back(mmInfo);

sort(mmlist.begin(),mmlist.end());
for (int i=0; i<mmlist.size(); i++)
{
  cout << " first row :" << mmlist[i].strMmNo << " " << mmlist[i].strMmName 
       <<" " <<mmlist[i].strMmsPlace  << " " << mmlist[i].strMmsAdd ;
}

2 个答案:

答案 0 :(得分:0)

这甚至可以编译吗? (不!)

  • 您正在尝试初始化不存在的值。也许初始化strMm*值而不是stringValue
  • 您正在多次初始化相同的值(甚至不存在!)(使用相应的strMm*值初始化mm*成员)
  • 您的比较函数会比较不存在的值。 (比较strMmNo < str.strMmNo)。

此外,您甚至没有要在列表中排序的值。

答案 1 :(得分:0)

您的代码没有问题。我的意思是,使用是正确的,但结构定义似乎不正确。至少在Visual C ++ 9.0中它是不可编译的。请制作一个正确的初始化列表。以下代码对我来说很好

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

typedef struct NodeInfo
{
    int x;

    NodeInfo( int xi ){ x = xi;  }
    bool operator < (const NodeInfo& str) const
    {
        return (x < str.x);
    }
}MMInfo;

int _tmain(int argc, _TCHAR* argv[])
{
    std::vector < MMInfo > mmlist;

    mmlist.push_back( 1 );
    mmlist.push_back( 31 );
    mmlist.push_back( 21 );
    mmlist.push_back( 11 );
    mmlist.push_back( 41 );
    sort(mmlist.begin(),mmlist.end());
    for (unsigned int i=0; i<mmlist.size(); i++)
    {
        cout<< " x row : \n" << mmlist[i].x ;
    }
    return 0;
}