void merge( std::set<T>& bigger, const std::set<U>& smaller ) { // invariant: largest element of smaller is smaller than the smallest element of bigger for( auto iter = smaller.rbegin() ; iter != smaller.rend() ; ++iter ) bigger.emplace_hint( bigger.begin(), *iter ) ; // http://en.cppreference.com/w/cpp/container/set/emplace_hint }