# include & ltiostream & gt
# include & lt地圖& gt
# include & lt列表& gt
# include & lt字符串& gt
使用命名空間std
結構出生信息
{
int月;
int day
出生信息()
{
月份= 0;
day = 0;
}
布爾運算符= =(const birth info & amp;rhs)常數
{
if(month = = RHS . month & amp;& amp日==相對日)
{
返回true
}
返回false
}
布爾運算符& lt(const出生信息和rhs)常數
{
if(月份& ltrhs .月)
{
返回true
}
else if(month = = RHS . month)
{
if(day & lt;rhs.day)
{
返回true
}
}
返回false
}
};
結構SameBirthInfo
{
int nCount
列表& lt字符串& gtStrNoList
SameBirthInfo()
{
nCount = 0;
}
};
typedef映射& ltBirthInfo,SameBirthInfo & gt結果;
int main()
{
int nstudent count = 0;
string strNo =““;
BirthInfo BirInfo
結果結果;
same birth info same birth info;
CIN & gt;& gtnStudentCount
while(nStudentCount-& gt;0 )
{
CIN & gt;& gtstrNo & gt& gtBirInfo.month & gt& gtBirInfo.day
result::iterator ITER = result . find(BirInfo);
if(ITER = = result . end())
{
//找不到
pair & lt結果::叠代器,bool & gtpins ret = Result . insert(Result::value _ type(BirInfo,same birth info));
if(pins ret . second)
{
pins ret . first-& gt;second . ncount = 1;?//記錄這個生日有壹個人。
pins ret . first-& gt;第二。strnolist . push _ back(strNo);?//記錄此人的學號。
}
}
其他
{
//查找
ITER-& gt;second . ncount++;//Amanome ++中的相同人數
ITER-& gt;第二。strnolist . push _ back(strNo);//保存該學生的學號。
}
}
//輸出所有結果
result::const _ iterator cIter = result . begin();
while(cIter!= result.end()
{
//首先輸出生日
cout & lt& ltcIter-& gt;第壹個月<& lt“““& lt& ltcIter-& gt;第壹天;
//輸出所有學生證號。
列表& lt字符串& gt* const _ iterator cStrIter = cIter-& gt;第二。strnolist . begin();
while(cStrIter!= cIter-& gt;第二。StrNoList.end())
{
cout & lt& lt“““& lt& ltcStrIter-& gt;c _ str();
++ cStrIter;
}
cout & lt& ltendl
++ cIter;
}
返回0;
}