2014-04-28 32 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