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 | #include <algorithm> #include <iostream> #include <map> #include <cstdlib> #include <ctime> #include <vector> static const unsigned seek_count = 10000000; std::map<unsigned, unsigned>::const_iterator mapfind(const std::map<unsigned, unsigned>& a, const std::pair<unsigned, unsigned>& findme) { return a.find(findme.first); //MSVC9 implimentation, for compaison with vector code //const_iterator _Where = lower_bound(_Keyval); //return (_Where == end() // || _DEBUG_LT_PRED(this->comp, // _Keyval, _Key(_Where._Mynode())) // ? end() : _Where); } std::vector<std::pair<unsigned, unsigned>>::const_iterator vecfind(const std::vector<std::pair<unsigned, unsigned>>& a, const std::pair<unsigned, unsigned>& findme) { typedef std::vector<std::pair<unsigned, unsigned>>::const_iterator iterator; iterator iter = std::lower_bound(a.begin(), a.end(), findme); return ( (iter == a.end() || iter->first<findme.first) ? a.end() : iter ); } volatile unsigned nocheat = 0; int main() { clock_t beg,end; const unsigned test_size = 100000; srand(0); //repeatable tests std::vector<std::pair<unsigned, unsigned>> shuffled(test_size); for(unsigned i=0; i<test_size; ++i) shuffled[i] = std::pair<unsigned, unsigned>(rand(), rand()); nocheat = 0; { typedef std::map<unsigned, unsigned>::const_iterator iterator; std::map<unsigned, unsigned> a(shuffled.begin(), shuffled.end()); beg = clock(); for(unsigned i=0; i<seek_count; ++i) { const std::pair<unsigned, unsigned>& findme = shuffled[i%shuffled.size()]; iterator iter = mapfind(a, findme); nocheat += iter->second; } end = clock(); std::cout << "map: " << (end-beg) << ' ' << nocheat << '\n'; } nocheat = 0; { typedef std::vector<std::pair<unsigned, unsigned>>::const_iterator iterator; std::vector<std::pair<unsigned, unsigned>> a(shuffled.begin(), shuffled.end()); std::sort(a.begin(), a.end()); beg = clock(); for(unsigned i=0; i<seek_count; ++i) { const std::pair<unsigned, unsigned>& findme = shuffled[i%shuffled.size()]; iterator iter = vecfind(a, findme); nocheat += iter->second; } end = clock(); std::cout << "vec: " << (end-beg) << ' ' << nocheat << '\n'; } return 0; } |
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8Y3N0ZGxpYj4KI2luY2x1ZGUgPGN0aW1lPgojaW5jbHVkZSA8dmVjdG9yPgoKc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNlZWtfY291bnQgPSAxMDAwMDAwMDsKCnN0ZDo6bWFwPHVuc2lnbmVkLCB1bnNpZ25lZD46OmNvbnN0X2l0ZXJhdG9yIG1hcGZpbmQoY29uc3Qgc3RkOjptYXA8dW5zaWduZWQsIHVuc2lnbmVkPiYgYSwgY29uc3Qgc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4mIGZpbmRtZSkgewogICAgcmV0dXJuIGEuZmluZChmaW5kbWUuZmlyc3QpOwogICAgICAgIC8vTVNWQzkgaW1wbGltZW50YXRpb24sIGZvciBjb21wYWlzb24gd2l0aCB2ZWN0b3IgY29kZQoJCS8vY29uc3RfaXRlcmF0b3IgX1doZXJlID0gbG93ZXJfYm91bmQoX0tleXZhbCk7CgkJLy9yZXR1cm4gKF9XaGVyZSA9PSBlbmQoKQoJCS8vCXx8IF9ERUJVR19MVF9QUkVEKHRoaXMtPmNvbXAsCgkJLy8JCV9LZXl2YWwsIF9LZXkoX1doZXJlLl9NeW5vZGUoKSkpCgkJLy8JCQk/IGVuZCgpIDogX1doZXJlKTsKfQoKc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4+Ojpjb25zdF9pdGVyYXRvciB2ZWNmaW5kKGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+PiYgYSwgY29uc3Qgc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4mIGZpbmRtZSkgewogICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPj46OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOwogICAgaXRlcmF0b3IgaXRlciA9IHN0ZDo6bG93ZXJfYm91bmQoYS5iZWdpbigpLCBhLmVuZCgpLCBmaW5kbWUpOwogICAgcmV0dXJuICggKGl0ZXIgPT0gYS5lbmQoKSB8fCBpdGVyLT5maXJzdDxmaW5kbWUuZmlyc3QpID8gYS5lbmQoKSA6IGl0ZXIgKTsKfQoKdm9sYXRpbGUgdW5zaWduZWQgbm9jaGVhdCA9IDA7CmludCBtYWluKCkgewoJY2xvY2tfdCBiZWcsZW5kOwogICAgY29uc3QgdW5zaWduZWQgdGVzdF9zaXplID0gMTAwMDAwOwogICAgc3JhbmQoMCk7IC8vcmVwZWF0YWJsZSB0ZXN0cwoJc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4+IHNodWZmbGVkKHRlc3Rfc2l6ZSk7CiAgICBmb3IodW5zaWduZWQgaT0wOyBpPHRlc3Rfc2l6ZTsgKytpKQogICAgICAgIHNodWZmbGVkW2ldID0gc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4ocmFuZCgpLCByYW5kKCkpOwoKICAgIG5vY2hlYXQgPSAwOwogICAgewogICAgICAgIHR5cGVkZWYgc3RkOjptYXA8dW5zaWduZWQsIHVuc2lnbmVkPjo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7CiAgICAgICAgc3RkOjptYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBhKHNodWZmbGVkLmJlZ2luKCksIHNodWZmbGVkLmVuZCgpKTsKCSAgICBiZWcgPSBjbG9jaygpOwogICAgICAgIGZvcih1bnNpZ25lZCBpPTA7IGk8c2Vla19jb3VudDsgKytpKSB7CiAgICAgICAgICAgIGNvbnN0IHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+JiBmaW5kbWUgPSBzaHVmZmxlZFtpJXNodWZmbGVkLnNpemUoKV07CiAgICAgICAgICAgIGl0ZXJhdG9yIGl0ZXIgPSBtYXBmaW5kKGEsIGZpbmRtZSk7CiAgICAgICAgICAgIG5vY2hlYXQgKz0gaXRlci0+c2Vjb25kOwogICAgICAgIH0KICAgICAgICBlbmQgPSBjbG9jaygpOwoJICAgIHN0ZDo6Y291dCA8PCAibWFwOiAiIDw8IChlbmQtYmVnKSA8PCAnICcgPDwgbm9jaGVhdCA8PCAnXG4nOwogICAgfQogICAgbm9jaGVhdCA9IDA7CiAgICB7CiAgICAgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPj46OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOwogICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+PiBhKHNodWZmbGVkLmJlZ2luKCksIHNodWZmbGVkLmVuZCgpKTsKICAgICAgICBzdGQ6OnNvcnQoYS5iZWdpbigpLCBhLmVuZCgpKTsKCSAgICBiZWcgPSBjbG9jaygpOwogICAgICAgIGZvcih1bnNpZ25lZCBpPTA7IGk8c2Vla19jb3VudDsgKytpKSB7CiAgICAgICAgICAgIGNvbnN0IHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+JiBmaW5kbWUgPSBzaHVmZmxlZFtpJXNodWZmbGVkLnNpemUoKV07CiAgICAgICAgICAgIGl0ZXJhdG9yIGl0ZXIgPSB2ZWNmaW5kKGEsIGZpbmRtZSk7CiAgICAgICAgICAgIG5vY2hlYXQgKz0gaXRlci0+c2Vjb25kOwogICAgICAgIH0KICAgICAgICBlbmQgPSBjbG9jaygpOwogICAgICAgIHN0ZDo6Y291dCA8PCAidmVjOiAiIDw8IChlbmQtYmVnKSA8PCAnICcgPDwgbm9jaGVhdCA8PCAnXG4nOwogICAgfQoKCXJldHVybiAwOwp9
-
upload with new input
-
result: Success time: 4.94s memory: 2968 kB returned value: 0
map: 2950000 28231668 vec: 1910000 3116616024
-
result: Success time: 4.9s memory: 2968 kB returned value: 0
map: 2910000 28231668 vec: 1900000 3116616024


