#include <iostream>
#include <set>
class Entity {
public:
int num;
Entity(int num):num(num){}
bool operator< (const Entity& _entity) const { return (this->num < _entity.num); }
};
struct my_cmp {
bool operator() (const Entity* lhs, const Entity* rhs) const { return (*lhs < *rhs); }
};
class EntityManager {
private:
std::set<Entity*, my_cmp> entities;
public:
void AddEntity(int num) { entities.insert(new Entity(num)); }
void ListAllEntities() const {
unsigned int i = 0;
for (auto& entity: entities) {
std::cout << "Entity[" << i << "]: num:" << entity->num << std::endl;
i++;
}
}
};
int main(void) {
EntityManager manager;
manager.AddEntity(2);
manager.AddEntity(1);
manager.AddEntity(4);
manager.AddEntity(3);
manager.ListAllEntities();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgogI2luY2x1ZGUgPHNldD4KCiBjbGFzcyBFbnRpdHkgewogcHVibGljOgogaW50IG51bTsKIEVudGl0eShpbnQgbnVtKTpudW0obnVtKXt9CiAgICAgYm9vbCBvcGVyYXRvcjwgKGNvbnN0IEVudGl0eSYgX2VudGl0eSkgY29uc3QgeyByZXR1cm4gKHRoaXMtPm51bSA8IF9lbnRpdHkubnVtKTsgfQogfTsKCiBzdHJ1Y3QgbXlfY21wIHsKICAgICBib29sIG9wZXJhdG9yKCkgKGNvbnN0IEVudGl0eSogbGhzLCBjb25zdCBFbnRpdHkqIHJocykgY29uc3QgeyByZXR1cm4gKCpsaHMgPCAqcmhzKTsgfQogfTsKCiBjbGFzcyBFbnRpdHlNYW5hZ2VyIHsKICAgICBwcml2YXRlOgogICAgICAgIHN0ZDo6c2V0PEVudGl0eSosIG15X2NtcD4gZW50aXRpZXM7CiAgIHB1YmxpYzoKICAgICAgICB2b2lkIEFkZEVudGl0eShpbnQgbnVtKSB7IGVudGl0aWVzLmluc2VydChuZXcgRW50aXR5KG51bSkpOyB9CiAgICAgICAgdm9pZCBMaXN0QWxsRW50aXRpZXMoKSBjb25zdCB7CiAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGkgPSAwOyAKICAgICAgICAgICAgICBmb3IgKGF1dG8mIGVudGl0eTogZW50aXRpZXMpIHsKICAgICAgICAgICAgICAgICAgc3RkOjpjb3V0IDw8ICJFbnRpdHlbIiA8PCBpIDw8ICJdOiBudW06IiA8PCBlbnRpdHktPm51bSA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgICAgICAgIGkrKzsKICAgICAgICAgICAgICB9CiAgICAgICAgIH0KfTsKCmludCBtYWluKHZvaWQpIHsKICAgIEVudGl0eU1hbmFnZXIgbWFuYWdlcjsKICAgIG1hbmFnZXIuQWRkRW50aXR5KDIpOwogICAgbWFuYWdlci5BZGRFbnRpdHkoMSk7CiAgICBtYW5hZ2VyLkFkZEVudGl0eSg0KTsKICAgIG1hbmFnZXIuQWRkRW50aXR5KDMpOwogICAgbWFuYWdlci5MaXN0QWxsRW50aXRpZXMoKTsKICAgIHJldHVybiAwOwp9