问题如下:创建2个班级学生,科目并将他们的数据成员作为地图输入并使用Composition进行互连。代码如下:
#include <iostream>
#include <string>
#include <map>
using namespace std;
class student {
public:
map<int, string> student_map;
student()
{
student_map[100] = " Noel Philip";
student_map[101] = " John";
student_map[102] = " Jerry";
student_map[103] = " James";
}
void display_details_Engineering()
{
for (map<int, string>::iterator itr = student_map.begin(); ((itr->first) == 100) || ((itr->first) == 101); ++itr) {
cout << "ROll NO" << itr->first << " Name" << itr->second << endl;
}
}
void display_details_Medicine()
{
for (map<int, string>::iterator itr = student_map.begin(); ((itr->first) == 102) || ((itr->first) == 103); ++itr) {
cout << "ROll NO" << itr->first << " Name" << itr->second << endl;
}
}
void display_alldetails()
{
for (map<int, string>::iterator itr = student_map.begin(); itr != student_map.end(); ++itr) {
cout << "ROll NO" << itr->first << " Name" << itr->second << endl;
}
}
~student(){};
};
class subjects {
public:
map<string, int> eng_subjects;
map<string, int> medicine_subjects;
subjects()
{
eng_subjects[" Engineering Physics"] = 90;
eng_subjects[" Engineering Chemistry"] = 80;
medicine_subjects[" Zoology"] = 90;
medicine_subjects[" Humanology"] = 80;
}
void display_details_Engineering()
{
for (map<string, int>::iterator itr = eng_subjects.begin(); itr != eng_subjects.end(); ++itr) {
cout << "Subject Name" << itr->first << " Grades" << itr->second << endl;
}
s1.display_details_Engineering();
}
void display_details_Medicine()
{
for (map<string, int>::iterator itr = medicine_subjects.begin(); itr != medicine_subjects.end(); ++itr) {
cout << "Subject Name" << itr->first << " Grades" << itr->second << endl;
}
s1.display_details_Medicine();
}
~subjects(){};
// void display_details_Engineering() Not Required
//{
//s1.display_details_Engineering();
//}
private:
student s1;
};
int main()
{
student s;
s.display_alldetails();
s.display_details_Engineering();
s.display_details_Medicine();
subjects sub;
sub.display_details_Engineering();
sub.display_details_Medicine();
}
输出如下
ROll NO100名称Noel Philip
ROll NO101姓名约翰
ROll NO102名称Jerry
ROll NO103名字詹姆斯
ROll NO100名称Noel Philip
ROll NO101姓名约翰
学科名称工程化学等级80
学科名称工程物理Grades90
ROll NO100名称Noel Philip
ROll NO101姓名约翰
学科名称人文学80年级
主题名称动物学等级90
当所需的输出为:
时ROll NO100名称Noel Philip
ROll NO101姓名约翰
ROll NO102名称Jerry
ROll NO103名字詹姆斯
ROll NO100名称Noel Philip
ROll NO101姓名约翰
ROll NO102名称Jerry
ROll NO103名字詹姆斯
学科名称工程化学等级80。
学科名称工程物理Grades90
ROll NO100名称Noel Philip
ROll NO101姓名约翰
学科名称人文学80年级
主题名称动物学等级90
ROll NO102名称Jerry
ROll NO103名字詹姆斯
答案 0 :(得分:1)
我没有仔细观察,但是在你的“for”循环中,中间表达式不是过滤器,如果它没有计算为布尔值,则for循环停止。因此,在“display_details_Medicine()”中,只要itr-&gt;首先不等于102或103,循环就会结束。
在方法体内进行比较。或者更好的是,为每个集创建一个值数组并遍历每个集合,这比读取地图的每个成员并仅选择您想要的那些成员更有效。
答案 1 :(得分:0)
@rabinnh是对的。对于display_details_Engineering()
和display_details_Medicine()
,请检查循环内的条件。
以下代码应该可以正常工作。
void display_details_Engineering()
{
for (map<int, string>::iterator itr = student_map.begin(); itr != student_map.end(); ++itr) {
if (itr->first == 100 || itr->first == 101)
cout << "ROll NO" << itr->first << " Name" << itr->second << endl;
}
}
void display_details_Medicine()
{
for (map<int, string>::iterator itr = student_map.begin(); itr != student_map.end(); ++itr) {
if (itr->first == 102 || itr->first == 103)
cout << "ROll NO" << itr->first << " Name" << itr->second << endl;
}
}
您正在使用按键排序的std::map
。
在display_details_Medicine()
中,您要打印密钥102
和103
。但是,你的for循环首先看到键100
,这会导致循环条件失败,结束循环而不打印任何内容。