1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | #include <cstdlib> #include <stdint.h> #include <iostream> #include <map> #include <deque> #include <utility> #include <vector> typedef std::deque<uint64_t> Deque; typedef std::map<uint32_t, Deque > MyMumap; typedef std::vector< std::pair<uint32_t,uint64_t> > Vector; typedef std::multimap<uint32_t, uint64_t> Multimap; const uint32_t num_partitions = 100000; const size_t num_elements = 500000; int main() { srand( 1337 ); Vector values; for( size_t i = 0; i <= num_elements; ++i ) { uint32_t key = rand() % num_partitions; uint64_t value = rand(); values.push_back( std::make_pair( key, value ) ); } clock_t start; clock_t stop; { start = clock(); Multimap mumap; for(Vector::const_iterator iter = values.begin(); iter != values.end(); ++iter ) { mumap.insert( *iter ); } stop = clock(); std::cout << "Filling std::multimap: " << stop - start << " ticks" << std::endl; uint64_t sum = 0; start = clock(); for( uint32_t i = 0; i <= num_partitions; ++i ) { uint64_t sum = 0; std::pair<Multimap::const_iterator, Multimap::const_iterator> range = mumap.equal_range( i ); for(Multimap::const_iterator iter = range.first; iter != range.second; ++iter ) { sum += iter->second; } } stop = clock(); std::cout << "Reading std::multimap: " << stop - start << " ticks (" << sum << ")" << std::endl; } { start = clock(); MyMumap mumap; for(Vector::const_iterator iter = values.begin(); iter != values.end(); ++iter ) { mumap[ iter->first ].push_back( iter->second ); } stop = clock(); std::cout << "Filling MyMumap: " << stop - start << " ticks" << std::endl; uint64_t sum = 0; start = clock(); for( uint32_t i = 0; i <= num_partitions; ++i ) { uint64_t sum = 0; MyMumap::const_iterator it = mumap.find(i); if (it == mumap.end()) { continue; } for (Deque::const_iterator iter = it->second.begin(), end = it->second.end(); iter != end; ++iter ) { sum += *iter; } } stop = clock(); std::cout << "Reading MyMumap: " << stop - start << " ticks (" << sum << ")" << std::endl; } } |
I2luY2x1ZGUgPGNzdGRsaWI+CgojaW5jbHVkZSA8c3RkaW50Lmg+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPGRlcXVlPgojaW5jbHVkZSA8dXRpbGl0eT4KI2luY2x1ZGUgPHZlY3Rvcj4KCnR5cGVkZWYgc3RkOjpkZXF1ZTx1aW50NjRfdD4gRGVxdWU7CnR5cGVkZWYgc3RkOjptYXA8dWludDMyX3QsIERlcXVlID4gTXlNdW1hcDsKCnR5cGVkZWYgc3RkOjp2ZWN0b3I8IHN0ZDo6cGFpcjx1aW50MzJfdCx1aW50NjRfdD4gPiBWZWN0b3I7CnR5cGVkZWYgc3RkOjptdWx0aW1hcDx1aW50MzJfdCwgdWludDY0X3Q+IE11bHRpbWFwOwoKY29uc3QgdWludDMyX3QgbnVtX3BhcnRpdGlvbnMgPSAxMDAwMDA7CmNvbnN0IHNpemVfdCBudW1fZWxlbWVudHMgPSAgICAgNTAwMDAwOwoKaW50IG1haW4oKSB7CiAgc3JhbmQoIDEzMzcgKTsKICBWZWN0b3IgdmFsdWVzOwogIGZvciggc2l6ZV90IGkgPSAwOyBpIDw9IG51bV9lbGVtZW50czsgKytpICkgewogICAgdWludDMyX3Qga2V5ID0gcmFuZCgpICUgbnVtX3BhcnRpdGlvbnM7CiAgICB1aW50NjRfdCB2YWx1ZSA9IHJhbmQoKTsKICAgIHZhbHVlcy5wdXNoX2JhY2soIHN0ZDo6bWFrZV9wYWlyKCBrZXksIHZhbHVlICkgKTsKICB9CiAgY2xvY2tfdCBzdGFydDsKICBjbG9ja190IHN0b3A7CiAgewogICAgc3RhcnQgPSBjbG9jaygpOwogICAgTXVsdGltYXAgbXVtYXA7CiAgICBmb3IoVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gdmFsdWVzLmJlZ2luKCk7IGl0ZXIgIT0gdmFsdWVzLmVuZCgpOyArK2l0ZXIgKSB7CiAgICAgIG11bWFwLmluc2VydCggKml0ZXIgKTsKICAgIH0KICAgIHN0b3AgPSBjbG9jaygpOwogICAgc3RkOjpjb3V0IDw8ICJGaWxsaW5nIHN0ZDo6bXVsdGltYXA6ICIgPDwgc3RvcCAtIHN0YXJ0IDw8ICIgdGlja3MiIDw8IHN0ZDo6ZW5kbDsKICAgIAogICAgdWludDY0X3Qgc3VtID0gMDsKICAgIHN0YXJ0ID0gY2xvY2soKTsKICAgIGZvciggdWludDMyX3QgaSA9IDA7IGkgPD0gbnVtX3BhcnRpdGlvbnM7ICsraSApIHsKICAgICAgdWludDY0X3Qgc3VtID0gMDsKICAgICAgCiAgICAgIHN0ZDo6cGFpcjxNdWx0aW1hcDo6Y29uc3RfaXRlcmF0b3IsIE11bHRpbWFwOjpjb25zdF9pdGVyYXRvcj4gcmFuZ2UgPSBtdW1hcC5lcXVhbF9yYW5nZSggaSApOwogICAgICBmb3IoTXVsdGltYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSByYW5nZS5maXJzdDsgaXRlciAhPSByYW5nZS5zZWNvbmQ7ICsraXRlciApIHsKICAgICAgICBzdW0gKz0gaXRlci0+c2Vjb25kOwogICAgICB9CiAgICB9CiAgICBzdG9wID0gY2xvY2soKTsKICAgIHN0ZDo6Y291dCA8PCAiUmVhZGluZyBzdGQ6Om11bHRpbWFwOiAiIDw8IHN0b3AgLSBzdGFydCA8PCAiIHRpY2tzICgiIDw8IHN1bSA8PCAiKSIgPDwgc3RkOjplbmRsOwogIH0KICB7CiAgICBzdGFydCA9IGNsb2NrKCk7CiAgICBNeU11bWFwIG11bWFwOwogICAgZm9yKFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHZhbHVlcy5iZWdpbigpOyBpdGVyICE9IHZhbHVlcy5lbmQoKTsgKytpdGVyICkgewogICAgICBtdW1hcFsgaXRlci0+Zmlyc3QgXS5wdXNoX2JhY2soIGl0ZXItPnNlY29uZCApOwogICAgfQogICAgc3RvcCA9IGNsb2NrKCk7CiAgICBzdGQ6OmNvdXQgPDwgIkZpbGxpbmcgTXlNdW1hcDogIiA8PCBzdG9wIC0gc3RhcnQgPDwgIiB0aWNrcyIgPDwgc3RkOjplbmRsOwogICAgCiAgICB1aW50NjRfdCBzdW0gPSAwOwogICAgc3RhcnQgPSBjbG9jaygpOwogICAgZm9yKCB1aW50MzJfdCBpID0gMDsgaSA8PSBudW1fcGFydGl0aW9uczsgKytpICkgewogICAgICB1aW50NjRfdCBzdW0gPSAwOwogICAgICAKICAgICAgTXlNdW1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtdW1hcC5maW5kKGkpOwogICAgICBpZiAoaXQgPT0gbXVtYXAuZW5kKCkpIHsgY29udGludWU7IH0KICAgICAgCiAgICAgIGZvciAoRGVxdWU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBpdC0+c2Vjb25kLmJlZ2luKCksIGVuZCA9IGl0LT5zZWNvbmQuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIgKSB7CiAgICAgICAgc3VtICs9ICppdGVyOwogICAgICB9CiAgICB9CiAgICBzdG9wID0gY2xvY2soKTsKICAgIHN0ZDo6Y291dCA8PCAiUmVhZGluZyBNeU11bWFwOiAiIDw8IHN0b3AgLSBzdGFydCA8PCAiIHRpY2tzICgiIDw8IHN1bSA8PCAiKSIgPDwgc3RkOjplbmRsOwogIH0KfQo=
-
upload with new input
-
result: Success time: 1.19s memory: 63320 kB returned value: 0
Filling std::multimap: 340000 ticks Reading std::multimap: 60000 ticks (0) Filling MyMumap: 560000 ticks Reading MyMumap: 20000 ticks (0)


