#include <map>
#include <algorithm>
#include <chrono>
#include <iostream>
template < class Func>
void timeit( const char * message, Func f) {
auto start = std:: chrono :: system_clock :: now ( ) ;
f( ) ;
auto end = std:: chrono :: system_clock :: now ( ) ;
std:: chrono :: duration < double > elapsed_seconds = end- start;
std:: cout << "Duration of " << message << " is " <<
elapsed_seconds.count ( ) << "\n " ;
}
void insert_dumb( ) {
std:: map < int , int > map;
timeit ( "dumb! insertion" ,
[ & ] ( ) {
for ( int i = 0 ; i < 100000 ; ++ i)
map[ i] = i;
} ) ;
}
void insert_smart( ) {
std:: map < int , int > map;
timeit ( "smart insertion" ,
[ & ] ( ) {
for ( int i = 0 ; i < 100000 ; ++ i)
map.insert ( map.end ( ) , { i, i} ) ;
} ) ;
}
int main ( ) {
for ( int i = 0 ; i < 5 ; ++ i) {
insert_dumb( ) ;
insert_smart( ) ;
}
}
I2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGNocm9ubz4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPGNsYXNzIEZ1bmM+CnZvaWQgdGltZWl0KGNvbnN0IGNoYXIqIG1lc3NhZ2UsIEZ1bmMgZikgewoJYXV0byBzdGFydCA9IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpOwoJZigpOwoJYXV0byBlbmQgPSBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKTsKCXN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxkb3VibGU+IGVsYXBzZWRfc2Vjb25kcyA9IGVuZC1zdGFydDsKCXN0ZDo6Y291dCA8PCAiRHVyYXRpb24gb2YgIiA8PCBtZXNzYWdlIDw8ICIgaXMgIiA8PCAKCQllbGFwc2VkX3NlY29uZHMuY291bnQoKSA8PCAiXG4iOwp9Cgp2b2lkIGluc2VydF9kdW1iKCkgewoJc3RkOjptYXA8aW50LCBpbnQ+IG1hcDsKCXRpbWVpdCAoImR1bWIhIGluc2VydGlvbiIsIAoJCVsmXSgpIHsKCQkJZm9yIChpbnQgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKCQkJCW1hcFtpXSA9IGk7CgkJfSk7Cn0KCQkKdm9pZCBpbnNlcnRfc21hcnQoKSB7CglzdGQ6Om1hcDxpbnQsIGludD4gbWFwOwoJdGltZWl0ICgic21hcnQgaW5zZXJ0aW9uIiwgCgkJWyZdKCkgewoJCQlmb3IgKGludCBpID0gMDsgaSA8IDEwMDAwMDsgKytpKQoJCQkJbWFwLmluc2VydChtYXAuZW5kKCksIHtpLCBpfSk7CgkJfSk7Cn0KCmludCBtYWluICgpIHsKCQoJZm9yIChpbnQgaSA9IDA7IGkgPCA1OyArK2kpIHsKCQlpbnNlcnRfZHVtYigpOwoJCWluc2VydF9zbWFydCgpOwoJfQp9