#include <iostream>
#include <string>
#include <set>
struct compare {
bool operator() (const std::string& a, const std::string& b) const{
return a.size() < b.size();
}
};
template<typename T>
void print(const T& t){
for(auto& it : t)
std::cout << it << "\n";
}
template<typename T>
void insert(T& t, const char* value)
{
t.insert(value);
std::cout << "After inserting " << value << "\n";
print(t);
std::cout << "\n";
}
int main() {
std::set<std::string, compare> c;
insert(c, "Apple");
insert(c, "Lemon");
print(c);
return 0;
}
CSNpbmNsdWRlIDxpb3N0cmVhbT4KCSNpbmNsdWRlIDxzdHJpbmc+CgkjaW5jbHVkZSA8c2V0PgoKCXN0cnVjdCBjb21wYXJlIHsKCSAgICBib29sIG9wZXJhdG9yKCkgKGNvbnN0IHN0ZDo6c3RyaW5nJiBhLCBjb25zdCBzdGQ6OnN0cmluZyYgYikgY29uc3R7CgkgICAgICAgIHJldHVybiBhLnNpemUoKSA8IGIuc2l6ZSgpOwoJICAgIH0KCX07CgoJdGVtcGxhdGU8dHlwZW5hbWUgVD4KCXZvaWQgcHJpbnQoY29uc3QgVCYgdCl7CgkgICAgZm9yKGF1dG8mIGl0IDogdCkKCSAgICAgICAgc3RkOjpjb3V0IDw8IGl0IDw8ICJcbiI7Cgl9CgoJdGVtcGxhdGU8dHlwZW5hbWUgVD4KCXZvaWQgaW5zZXJ0KFQmIHQsIGNvbnN0IGNoYXIqIHZhbHVlKQoJewoJCXQuaW5zZXJ0KHZhbHVlKTsKCQlzdGQ6OmNvdXQgPDwgIkFmdGVyIGluc2VydGluZyAiIDw8IHZhbHVlIDw8ICJcbiI7CgkJcHJpbnQodCk7CgkJc3RkOjpjb3V0IDw8ICJcbiI7Cgl9CgoJaW50IG1haW4oKSB7ICAgIAoJICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nLCBjb21wYXJlPiBjOwoKCQlpbnNlcnQoYywgIkFwcGxlIik7CgkJaW5zZXJ0KGMsICJMZW1vbiIpOwoKCSAgICBwcmludChjKTsKCgkgICAgcmV0dXJuIDA7Cgl9Cgk=