#include <iostream>
#include <string>
#include <set>
struct compare {
bool operator( ) ( const std:: string & a, const std:: string & b) const {
if ( a.size ( ) < b.size ( ) )
return true ;
if ( a.size ( ) == b.size ( ) && a.compare ( b) < 0 )
return true ;
return false ;
}
} ;
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" ) ;
insert( c, "Fig" ) ;
insert( c, "Kumquat" ) ;
print( c) ;
return 0 ;
}
CSNpbmNsdWRlIDxpb3N0cmVhbT4KCSNpbmNsdWRlIDxzdHJpbmc+CgkjaW5jbHVkZSA8c2V0PgoKCXN0cnVjdCBjb21wYXJlIHsKCSAgICBib29sIG9wZXJhdG9yKCkgKGNvbnN0IHN0ZDo6c3RyaW5nJiBhLCBjb25zdCBzdGQ6OnN0cmluZyYgYikgY29uc3R7CgkgICAgICAgIGlmIChhLnNpemUoKSA8IGIuc2l6ZSgpKQoJICAgICAgICAgICAgcmV0dXJuIHRydWU7CgkgICAgICAgIGlmIChhLnNpemUoKSA9PSBiLnNpemUoKSAmJiBhLmNvbXBhcmUoYikgPCAwKQoJICAgICAgICAgICAgcmV0dXJuIHRydWU7CgkgICAgICAgIHJldHVybiBmYWxzZTsKCSAgICB9Cgl9OwoKCXRlbXBsYXRlPHR5cGVuYW1lIFQ+Cgl2b2lkIHByaW50KGNvbnN0IFQmIHQpewoJICAgIGZvcihhdXRvJiBpdCA6IHQpCgkgICAgICAgIHN0ZDo6Y291dCA8PCBpdCA8PCAiXG4iOwoJfQoKCXRlbXBsYXRlPHR5cGVuYW1lIFQ+Cgl2b2lkIGluc2VydChUJiB0LCBjb25zdCBjaGFyKiB2YWx1ZSkKCXsKCQlhdXRvIHJlc3VsdCA9IHQuaW5zZXJ0KHZhbHVlKTsKCQlzdGQ6OmNvdXQgPDwgIkFmdGVyIGluc2VydGluZyAiIDw8IHZhbHVlIDw8ICIuIGluc2VydGVkPyAiIDw8IHJlc3VsdC5zZWNvbmQgPDwgIlxuIjsKCQlwcmludCh0KTsKCQlzdGQ6OmNvdXQgPDwgIlxuIjsKCX0KCglpbnQgbWFpbigpIHsgICAgCgkgICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmcsIGNvbXBhcmU+IGM7CgoJCWluc2VydChjLCAiQXBwbGUiKTsKCQlpbnNlcnQoYywgIkxlbW9uIik7CgkJaW5zZXJ0KGMsICJGaWciKTsKCQlpbnNlcnQoYywgIkt1bXF1YXQiKTsKCgkgICAgcHJpbnQoYyk7CgoJICAgIHJldHVybiAwOwoJfQoJ