#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)
{
auto result = t.insert(value);
std::cout << "After inserting " << value << ". inserted? " << result.second << "\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+CgkjaW5jbHVkZSA8c2V0PgoKCXN0cnVjdCBjb21wYXJlIHsKCSAgICBib29sIG9wZXJhdG9yKCkgKGNvbnN0IHN0ZDo6c3RyaW5nJiBhLCBjb25zdCBzdGQ6OnN0cmluZyYgYikgY29uc3R7CgkgICAgICAgIHJldHVybiBhLnNpemUoKSA8IGIuc2l6ZSgpOwoJICAgIH0KCX07CgoJdGVtcGxhdGU8dHlwZW5hbWUgVD4KCXZvaWQgcHJpbnQoY29uc3QgVCYgdCl7CgkgICAgZm9yKGF1dG8mIGl0IDogdCkKCSAgICAgICAgc3RkOjpjb3V0IDw8IGl0IDw8ICJcbiI7Cgl9CgoJdGVtcGxhdGU8dHlwZW5hbWUgVD4KCXZvaWQgaW5zZXJ0KFQmIHQsIGNvbnN0IGNoYXIqIHZhbHVlKQoJewoJCWF1dG8gcmVzdWx0ID0gdC5pbnNlcnQodmFsdWUpOwoJCXN0ZDo6Y291dCA8PCAiQWZ0ZXIgaW5zZXJ0aW5nICIgPDwgdmFsdWUgPDwgIi4gaW5zZXJ0ZWQ/ICIgPDwgcmVzdWx0LnNlY29uZCA8PCAiXG4iOwoJCXByaW50KHQpOwoJCXN0ZDo6Y291dCA8PCAiXG4iOwoJfQoKCWludCBtYWluKCkgeyAgICAKCSAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZywgY29tcGFyZT4gYzsKCgkJaW5zZXJ0KGMsICJBcHBsZSIpOwoJCWluc2VydChjLCAiTGVtb24iKTsKCgkgICAgcHJpbnQoYyk7CgoJICAgIHJldHVybiAwOwoJfQoJ