2014-04-28 30 views
0

我的地圖和循環在這裏有問題。所以基本上我的地圖是:地圖和For循環

typedef map <int,string> studentRecord; 
studentRecord sRecord; 

,我把鑰匙和元素中一個for循環:

for(int i = 0; i < sizephys; i++){ 
    phys.push_back(new physics()); 
    cout << "\nPlease enter student name:"<<endl; 
    getline(cin , namephys); 
    cout << "Please enter student id:"<<endl; 
    cin >> idphys; 
    cin.ignore(); 
    phys[i]->setNameId(namephys, idphys); 
    phys[i]->addCourse(course, mark); 
    sRecord[idphys] = namephys; 
    } 

現在的問題是,我想用地圖來搜索循環結束,即等之後這個:

int recordSearch; 
cout << "\nPlease enter ID key of student to search their record." <<endl; 
cin >> recordSearch; 
searchDatabase(sRecord,recordSearch); 

if (recordSearch == idphys) 
{ 
    phys[i]->printCourseInfo(); 
} 

它顯然不會工作,因爲phys [i]在循環之外。有沒有其他方法可以做到這一點?謝謝

void searchDatabase(studentRecord &sRecord, int recordSearch) 
{ 
    studentRecord::iterator studRecordIter; 
    studRecordIter = sRecord.find(recordSearch); 
    if(studRecordIter != sRecord.end()) 
    cout<<"\nFound record for student " << 
    recordSearch << " = "<< 
    studRecordIter->second<<endl; 
    else 
    cout<<"Sorry, record " << recordSearch << 
    " is not in database"<<endl; 
} 
+2

你知道'map'有一個稱爲'find'功能,對不對?這是地圖的一個點。 –

+0

你可以顯示'searchDatabase'嗎? –

+0

@ChrisDrewvoid 用它編輯。 – Cubed

回答

1

爲什麼你在第一個地方使用矢量(或任何pys)? 不管怎樣,更換這行:

sRecord[idphys] = namephys; 

sRecord[idphys] = phys[i]; 

和:

typedef map <int,string> studentRecord; 

typedef map <int, physic *> studentRecord; 

應該做的伎倆。

(另請注意,你不給你的載體類型,所以可能有一些調整)

+0

如果你使用學生id到'physics *'的地圖,你可以扔掉'phys'向量。我不明白它有什麼用處,假設'phys'向量中的索引沒有特別的含義。 –

+0

這個向量可以是''physics'擁有'unique_ptr'的所有者,並且多個(可能是臨時的)地圖只是作爲方便的索引在那裏。但是,這就是爲什麼我以「爲什麼你首先使用?」開始我的回答。「 – Joky