2011-04-27 98 views
0

我試圖對struct的向量進行排序。以下是我的代碼。我無法正確排序......任何人都可以幫助我..?我需要根據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 ; 
} 
+1

爲什麼?什麼不是「恰當地」發生? – 2011-04-27 13:31:01

+0

這段代碼甚至沒有編譯。問題是爲什麼它不能編譯? – 2011-04-27 13:32:57

+1

'mmlist'是空的,所以一起移動,沒有什麼可以在這裏排序。 – 2011-04-27 13:36:09

回答

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; 
} 
0

這是否甚至編譯? (不!)

  • 您試圖初始化不存在的值。也許初始化您的strMm*值而不是stringValue
  • 你初始化值相同(甚至不存在!)多次(初始化strMm*會員與相應mm*值)
  • 您的比較函數比較不存在的值。 (比較strMmNo < str.strMmNo)。

此外,你甚至沒有值在你的列表中排序。