#include <string>
#include <vector>
#include <map>
#include <set>
#include <iostream>
#include <list>
class Student
{
public:
Student();
~Student();
void setName(const std::string& p_name) { _name = p_name; }
void setArrivalTime(const int p_arr_t) { _arrivalTime = p_arr_t; }
const std::string& getName() const { return _name; }
const int getArrivalTime() const { return _arrivalTime; }
private:
std::string _name;
int _arrivalTime;
};
struct CompareStudByArrivaltime
{
const bool operator()(const Student* s1, const Student* s2) const;
};
Student::Student()
{}
Student::~Student()
{}
const bool CompareStudByArrivaltime::operator()(const Student* s1, const Student* s2) const
{
if (s1->getName() == s2->getName())
{
return false;
}
return (s1->getArrivalTime() < s2->getArrivalTime());
}
typedef std::list<Student> StudentsPool;
typedef std::set<Student*, CompareStudByArrivaltime> Students;
typedef std::map<std::string, Students> SchoolStudentsMap;
SchoolStudentsMap g_school_studs;
StudentsPool g_stud_pool;
Student* getStud(const std::string& n)
{
for (StudentsPool::iterator itr = g_stud_pool.begin(); itr != g_stud_pool.end(); ++itr)
{
if (itr->getName() == n)
{
return &(*itr);
}
}
return NULL;
}
void initObj()
{
/** School 1 Record */
std::string school_name = "school1";
char c1[] = { 's', 't', 'u', 'd', '1', '\0' };
std::string n1(c1);
//Student* s1 = new Student();
Student s1;
s1.setName(n1);
s1.setArrivalTime(10);
g_stud_pool.push_back(s1);
Student* tmp = NULL;
tmp = getStud("stud1");
g_school_studs[school_name].insert(tmp);
char c2[] = { 's', 't', 'u', 'd', '2', '\0' };
std::string n2(c2);
Student s2;
s2.setName(n2);
s2.setArrivalTime(2);
g_stud_pool.push_back(s2);
tmp = getStud("stud2");
g_school_studs[school_name].insert(tmp);
char c3[] = { 's', 't', 'u', 'd', '3', '\0' };
std::string n3(c3);
Student s3;
s3.setName(n3);
s3.setArrivalTime(5);
g_stud_pool.push_back(s3);
tmp = getStud("stud3");
g_school_studs[school_name].insert(tmp);
}
void processObj()
{
for (SchoolStudentsMap::iterator itr = g_school_studs.begin(); itr != g_school_studs.end(); ++itr)
{
Students& studs = itr->second;
for (Students::iterator sitr = studs.begin(); sitr != studs.end(); ++sitr)
{
Student* s = (*sitr);
std::cerr << "Name: " << s->getName() << ", Arr Time: " << s->getArrivalTime() << std::endl;
}
}
}
int main(int argc, const char * argv[])
{
initObj();
processObj();
return 0;
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPHNldD4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bGlzdD4KCmNsYXNzIFN0dWRlbnQKewoKcHVibGljOgogICAgU3R1ZGVudCgpOwogICAgflN0dWRlbnQoKTsKCiAgICB2b2lkIHNldE5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIHBfbmFtZSkgICAgIHsgX25hbWUgPSBwX25hbWU7IH0KICAgIHZvaWQgc2V0QXJyaXZhbFRpbWUoY29uc3QgaW50IHBfYXJyX3QpICAgICAgeyBfYXJyaXZhbFRpbWUgPSBwX2Fycl90OyB9CgogICAgY29uc3Qgc3RkOjpzdHJpbmcmIGdldE5hbWUoKSBjb25zdCAgICAgICAgIHsgcmV0dXJuIF9uYW1lOyB9CiAgICBjb25zdCBpbnQgZ2V0QXJyaXZhbFRpbWUoKSBjb25zdCAgICAgICAgICAgeyByZXR1cm4gX2Fycml2YWxUaW1lOyB9Cgpwcml2YXRlOgogICAgc3RkOjpzdHJpbmcgX25hbWU7CiAgICBpbnQgX2Fycml2YWxUaW1lOwoKfTsKCnN0cnVjdCBDb21wYXJlU3R1ZEJ5QXJyaXZhbHRpbWUKewogICAgY29uc3QgYm9vbCBvcGVyYXRvcigpKGNvbnN0IFN0dWRlbnQqIHMxLCBjb25zdCBTdHVkZW50KiBzMikgY29uc3Q7Cn07CgoKU3R1ZGVudDo6U3R1ZGVudCgpCnt9CgpTdHVkZW50Ojp+U3R1ZGVudCgpCnt9Cgpjb25zdCBib29sIENvbXBhcmVTdHVkQnlBcnJpdmFsdGltZTo6b3BlcmF0b3IoKShjb25zdCBTdHVkZW50KiBzMSwgY29uc3QgU3R1ZGVudCogczIpIGNvbnN0CnsKICAgIGlmIChzMS0+Z2V0TmFtZSgpID09IHMyLT5nZXROYW1lKCkpCiAgICB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIChzMS0+Z2V0QXJyaXZhbFRpbWUoKSA8IHMyLT5nZXRBcnJpdmFsVGltZSgpKTsKfQoKdHlwZWRlZiBzdGQ6Omxpc3Q8U3R1ZGVudD4gU3R1ZGVudHNQb29sOwp0eXBlZGVmIHN0ZDo6c2V0PFN0dWRlbnQqLCBDb21wYXJlU3R1ZEJ5QXJyaXZhbHRpbWU+IFN0dWRlbnRzOwp0eXBlZGVmIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBTdHVkZW50cz4gU2Nob29sU3R1ZGVudHNNYXA7CgpTY2hvb2xTdHVkZW50c01hcCBnX3NjaG9vbF9zdHVkczsKU3R1ZGVudHNQb29sIGdfc3R1ZF9wb29sOwoKU3R1ZGVudCogZ2V0U3R1ZChjb25zdCBzdGQ6OnN0cmluZyYgbikKewogICAgZm9yIChTdHVkZW50c1Bvb2w6Oml0ZXJhdG9yIGl0ciA9IGdfc3R1ZF9wb29sLmJlZ2luKCk7IGl0ciAhPSBnX3N0dWRfcG9vbC5lbmQoKTsgKytpdHIpCiAgICB7CiAgICAgICAgaWYgKGl0ci0+Z2V0TmFtZSgpID09IG4pCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJigqaXRyKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIE5VTEw7Cn0KCnZvaWQgaW5pdE9iaigpCnsKICAgIC8qKiBTY2hvb2wgMSBSZWNvcmQgKi8KICAgIHN0ZDo6c3RyaW5nIHNjaG9vbF9uYW1lID0gInNjaG9vbDEiOwoKICAgIGNoYXIgYzFbXSA9IHsgJ3MnLCAndCcsICd1JywgJ2QnLCAnMScsICdcMCcgfTsKICAgIHN0ZDo6c3RyaW5nIG4xKGMxKTsKICAgIC8vU3R1ZGVudCogczEgPSBuZXcgU3R1ZGVudCgpOwogICAgU3R1ZGVudCBzMTsKICAgIHMxLnNldE5hbWUobjEpOwogICAgczEuc2V0QXJyaXZhbFRpbWUoMTApOwogICAgZ19zdHVkX3Bvb2wucHVzaF9iYWNrKHMxKTsKCiAgICBTdHVkZW50KiB0bXAgPSBOVUxMOwoKICAgIHRtcCA9IGdldFN0dWQoInN0dWQxIik7CiAgICBnX3NjaG9vbF9zdHVkc1tzY2hvb2xfbmFtZV0uaW5zZXJ0KHRtcCk7CgogICAgY2hhciBjMltdID0geyAncycsICd0JywgJ3UnLCAnZCcsICcyJywgJ1wwJyB9OwogICAgc3RkOjpzdHJpbmcgbjIoYzIpOwogICAgU3R1ZGVudCBzMjsKICAgIHMyLnNldE5hbWUobjIpOwogICAgczIuc2V0QXJyaXZhbFRpbWUoMik7CiAgICBnX3N0dWRfcG9vbC5wdXNoX2JhY2soczIpOwoKICAgIHRtcCA9IGdldFN0dWQoInN0dWQyIik7CiAgICBnX3NjaG9vbF9zdHVkc1tzY2hvb2xfbmFtZV0uaW5zZXJ0KHRtcCk7CgogICAgY2hhciBjM1tdID0geyAncycsICd0JywgJ3UnLCAnZCcsICczJywgJ1wwJyB9OwogICAgc3RkOjpzdHJpbmcgbjMoYzMpOwogICAgU3R1ZGVudCBzMzsKICAgIHMzLnNldE5hbWUobjMpOwogICAgczMuc2V0QXJyaXZhbFRpbWUoNSk7CiAgICBnX3N0dWRfcG9vbC5wdXNoX2JhY2soczMpOwoKICAgIHRtcCA9IGdldFN0dWQoInN0dWQzIik7CiAgICBnX3NjaG9vbF9zdHVkc1tzY2hvb2xfbmFtZV0uaW5zZXJ0KHRtcCk7Cn0KCnZvaWQgcHJvY2Vzc09iaigpCnsKICAgIGZvciAoU2Nob29sU3R1ZGVudHNNYXA6Oml0ZXJhdG9yIGl0ciA9IGdfc2Nob29sX3N0dWRzLmJlZ2luKCk7IGl0ciAhPSBnX3NjaG9vbF9zdHVkcy5lbmQoKTsgKytpdHIpCiAgICB7CiAgICAgICAgU3R1ZGVudHMmIHN0dWRzID0gaXRyLT5zZWNvbmQ7CgogICAgICAgIGZvciAoU3R1ZGVudHM6Oml0ZXJhdG9yIHNpdHIgPSBzdHVkcy5iZWdpbigpOyBzaXRyICE9IHN0dWRzLmVuZCgpOyArK3NpdHIpCiAgICAgICAgewogICAgICAgICAgICBTdHVkZW50KiBzID0gKCpzaXRyKTsKICAgICAgICAgICAgc3RkOjpjZXJyIDw8ICJOYW1lOiAiIDw8IHMtPmdldE5hbWUoKSA8PCAiLCBBcnIgVGltZTogIiA8PCBzLT5nZXRBcnJpdmFsVGltZSgpIDw8IHN0ZDo6ZW5kbDsKICAgICAgICB9CiAgICB9Cgp9CgppbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqIGFyZ3ZbXSkKewoKICAgIGluaXRPYmooKTsKICAgIHByb2Nlc3NPYmooKTsKCiAgICByZXR1cm4gMDsKfQo=