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 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | // // kjellkod.wordpress.com // Comparison of sort. std::vector vs std::list // #include <list> #include <vector> #include <iostream> #include <functional> #include <random>> #include <iostream> #include <chrono> #include <string> #include <numeric> #include <algorithm> namespace g2 { typedef std::chrono::high_resolution_clock clock; typedef std::chrono::microseconds microseconds; typedef std::chrono::milliseconds milliseconds; clock::time_point now(){return clock::now();} microseconds intervalUs(const clock::time_point& t1, const clock::time_point& t0) {return std::chrono::duration_cast<microseconds>(t1 - t0);} milliseconds intervalMs(const clock::time_point& t1,const clock::time_point& t0) {return std::chrono::duration_cast<milliseconds>(t1 - t0);} class StopWatch { clock::time_point start_; public: StopWatch() : start_(clock::now()){} clock::time_point restart() { start_ = clock::now(); return start_;} microseconds elapsedUs() { return intervalUs(now(), start_);} milliseconds elapsedMs() {return intervalMs(now(), start_);} }; } // g2 typedef unsigned int Number; typedef std::list<Number> NumbersInList; typedef std::vector<Number> NumbersInVector; typedef long long int TimeValue; // Used for debugging and verification, // normally disabled template<typename Container> void printValues(const std::string& msg, const Container& values) { std::cout << msg << std::endl; std::for_each(values.begin(), values.end(), [&](const Number& n) { std::cout << " " << n << " "; }); std::cout << "\n" << std::endl; } void listVsVectorSort(size_t nbr_of_randoms) { std::uniform_int_distribution<int> distribution(0, nbr_of_randoms); std::mt19937 engine((unsigned int)time(0)); // Mersenne twister MT19937 auto generator = std::bind(distribution, engine); NumbersInVector vector(nbr_of_randoms); NumbersInList list; std::for_each(vector.begin(), vector.end(), [&](Number& n) { n = generator(); list.push_back(n); } ); TimeValue list_time; { // list measure sort g2::StopWatch watch; list.sort(); list_time = watch.elapsedUs().count(); } TimeValue vector_time; { // vector measure sort g2::StopWatch watch; std::sort(vector.begin(), vector.end()); vector_time = watch.elapsedUs().count(); } std::cout << nbr_of_randoms << "\t\t, " << list_time << "\t\t, " << vector_time << std::endl; } int main(int argc, char** argv) { std::cout << "\n\n********** Times in microseconds (us) **********" << std::endl; std::cout << "Elements SORT(List, Vector)" << std::endl; std::cout << "elements\t, list_time\t, vector_time" << std::endl; g2::StopWatch watch; listVsVectorSort(10); listVsVectorSort(100); listVsVectorSort(1000); listVsVectorSort(10000); listVsVectorSort(20000); listVsVectorSort(30000); listVsVectorSort(40000); size_t cnt = 50000; do{ listVsVectorSort(cnt); cnt+=50000; } while(cnt <= 1000000); listVsVectorSort(1000000); auto total_time_ms = watch.elapsedMs().count(); std::cout << "Exiting test,. the whole measuring took " << total_time_ms << "ms"; std::cout << " (" << total_time_ms/1000 << "seconds or " << total_time_ms/(1000*60) << " minutes)" << std::endl; return 0; } |
Ly8KLy8gICBramVsbGtvZC53b3JkcHJlc3MuY29tCi8vICBDb21wYXJpc29uIG9mIHNvcnQuIHN0ZDo6dmVjdG9yIHZzIHN0ZDo6bGlzdAovLwoKI2luY2x1ZGUgPGxpc3Q+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxyYW5kb20+PgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxjaHJvbm8+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDxudW1lcmljPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKbmFtZXNwYWNlIGcyCnsgICAgICAgCiAgdHlwZWRlZiBzdGQ6OmNocm9ubzo6aGlnaF9yZXNvbHV0aW9uX2Nsb2NrIGNsb2NrOwogIHR5cGVkZWYgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyBtaWNyb3NlY29uZHM7CiAgdHlwZWRlZiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIG1pbGxpc2Vjb25kczsKCiAgY2xvY2s6OnRpbWVfcG9pbnQgbm93KCl7cmV0dXJuIGNsb2NrOjpub3coKTt9CgogIG1pY3Jvc2Vjb25kcyBpbnRlcnZhbFVzKGNvbnN0IGNsb2NrOjp0aW1lX3BvaW50JiB0MSwgY29uc3QgY2xvY2s6OnRpbWVfcG9pbnQmIHQwKQogIHtyZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8bWljcm9zZWNvbmRzPih0MSAtIHQwKTt9CgogIG1pbGxpc2Vjb25kcyBpbnRlcnZhbE1zKGNvbnN0IGNsb2NrOjp0aW1lX3BvaW50JiB0MSxjb25zdCBjbG9jazo6dGltZV9wb2ludCYgdDApCiAge3JldHVybiBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxtaWxsaXNlY29uZHM+KHQxIC0gdDApO30KCgogIGNsYXNzIFN0b3BXYXRjaAogIHsKICAgIGNsb2NrOjp0aW1lX3BvaW50IHN0YXJ0XzsKICBwdWJsaWM6CiAgICBTdG9wV2F0Y2goKSA6IHN0YXJ0XyhjbG9jazo6bm93KCkpe30KICAgIGNsb2NrOjp0aW1lX3BvaW50IHJlc3RhcnQoKSAgICAgICAgIHsgc3RhcnRfID0gY2xvY2s6Om5vdygpOyByZXR1cm4gc3RhcnRfO30KICAgIG1pY3Jvc2Vjb25kcyBlbGFwc2VkVXMoKSAgICAgICAgICAgIHsgcmV0dXJuIGludGVydmFsVXMobm93KCksIHN0YXJ0Xyk7fQogICAgbWlsbGlzZWNvbmRzIGVsYXBzZWRNcygpICAgICAgICAgICAge3JldHVybiBpbnRlcnZhbE1zKG5vdygpLCBzdGFydF8pO30KICB9Owp9IC8vIGcyCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgIE51bWJlcjsKdHlwZWRlZiBzdGQ6Omxpc3Q8TnVtYmVyPiAgICAgICAgICAgTnVtYmVyc0luTGlzdDsKdHlwZWRlZiBzdGQ6OnZlY3RvcjxOdW1iZXI+ICAgICAgICAgTnVtYmVyc0luVmVjdG9yOwp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgICAgICAgICAgICAgICBUaW1lVmFsdWU7CgoKLy8gVXNlZCBmb3IgZGVidWdnaW5nIGFuZCB2ZXJpZmljYXRpb24sIAovLyBub3JtYWxseSBkaXNhYmxlZAp0ZW1wbGF0ZTx0eXBlbmFtZSBDb250YWluZXI+CnZvaWQgcHJpbnRWYWx1ZXMoY29uc3Qgc3RkOjpzdHJpbmcmIG1zZywgY29uc3QgQ29udGFpbmVyJiB2YWx1ZXMpCnsKICBzdGQ6OmNvdXQgPDwgbXNnIDw8IHN0ZDo6ZW5kbDsKICBzdGQ6OmZvcl9lYWNoKHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuZW5kKCksCiAgICBbJl0oY29uc3QgTnVtYmVyJiBuKSB7IHN0ZDo6Y291dCA8PCAiICIgPDwgbiA8PCAiICI7IH0pOyAKCiAgc3RkOjpjb3V0IDw8ICJcbiIgPDwgc3RkOjplbmRsOwp9CgoKCgp2b2lkIGxpc3RWc1ZlY3RvclNvcnQoc2l6ZV90IG5icl9vZl9yYW5kb21zKQp7CiAgc3RkOjp1bmlmb3JtX2ludF9kaXN0cmlidXRpb248aW50PiBkaXN0cmlidXRpb24oMCwgbmJyX29mX3JhbmRvbXMpOwogIHN0ZDo6bXQxOTkzNyBlbmdpbmUoKHVuc2lnbmVkIGludCl0aW1lKDApKTsgLy8gTWVyc2VubmUgdHdpc3RlciBNVDE5OTM3CiAgYXV0byBnZW5lcmF0b3IgPSBzdGQ6OmJpbmQoZGlzdHJpYnV0aW9uLCBlbmdpbmUpOwogIE51bWJlcnNJblZlY3RvciAgdmVjdG9yKG5icl9vZl9yYW5kb21zKTsKICBOdW1iZXJzSW5MaXN0IGxpc3Q7CgogIHN0ZDo6Zm9yX2VhY2godmVjdG9yLmJlZ2luKCksIHZlY3Rvci5lbmQoKSwgWyZdKE51bWJlciYgbikgeyBuID0gZ2VuZXJhdG9yKCk7IGxpc3QucHVzaF9iYWNrKG4pOyB9ICAgICk7CiAgVGltZVZhbHVlIGxpc3RfdGltZTsKICB7ICAvLyBsaXN0IG1lYXN1cmUgc29ydAogICAgZzI6OlN0b3BXYXRjaCB3YXRjaDsKICAgIGxpc3Quc29ydCgpOwogICAgbGlzdF90aW1lID0gd2F0Y2guZWxhcHNlZFVzKCkuY291bnQoKTsKICB9CiAgICBUaW1lVmFsdWUgdmVjdG9yX3RpbWU7ICAgIAogIHsgIC8vIHZlY3RvciBtZWFzdXJlIHNvcnQKICAgIGcyOjpTdG9wV2F0Y2ggd2F0Y2g7CiAgICBzdGQ6OnNvcnQodmVjdG9yLmJlZ2luKCksIHZlY3Rvci5lbmQoKSk7CiAgICB2ZWN0b3JfdGltZSA9IHdhdGNoLmVsYXBzZWRVcygpLmNvdW50KCk7CiAgfQoKICBzdGQ6OmNvdXQgPDwgIG5icl9vZl9yYW5kb21zIDw8ICJcdFx0LCAiIDw8IGxpc3RfdGltZSA8PCAiXHRcdCwgIiA8PCB2ZWN0b3JfdGltZSA8PCBzdGQ6OmVuZGw7Cn0KCgoKCgoKCmludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKeyAKc3RkOjpjb3V0IDw8ICJcblxuKioqKioqKioqKiBUaW1lcyBpbiBtaWNyb3NlY29uZHMgKHVzKSAqKioqKioqKioqIiA8PCBzdGQ6OmVuZGw7CnN0ZDo6Y291dCA8PCAiRWxlbWVudHMgU09SVChMaXN0LCBWZWN0b3IpIiA8PCBzdGQ6OmVuZGw7CnN0ZDo6Y291dCA8PCAgImVsZW1lbnRzXHQsIGxpc3RfdGltZVx0LCB2ZWN0b3JfdGltZSIgPDwgc3RkOjplbmRsOwpnMjo6U3RvcFdhdGNoIHdhdGNoOwpsaXN0VnNWZWN0b3JTb3J0KDEwKTsKbGlzdFZzVmVjdG9yU29ydCgxMDApOwpsaXN0VnNWZWN0b3JTb3J0KDEwMDApOwpsaXN0VnNWZWN0b3JTb3J0KDEwMDAwKTsKbGlzdFZzVmVjdG9yU29ydCgyMDAwMCk7Cmxpc3RWc1ZlY3RvclNvcnQoMzAwMDApOwpsaXN0VnNWZWN0b3JTb3J0KDQwMDAwKTsKc2l6ZV90IGNudCA9IDUwMDAwOwogIGRvewogICAgbGlzdFZzVmVjdG9yU29ydChjbnQpOwogICAgY250Kz01MDAwMDsgCiAgfQogIHdoaWxlKGNudCA8PSAxMDAwMDAwKTsgCiBsaXN0VnNWZWN0b3JTb3J0KDEwMDAwMDApOwoKCiAgYXV0byB0b3RhbF90aW1lX21zID0gd2F0Y2guZWxhcHNlZE1zKCkuY291bnQoKTsKICBzdGQ6OmNvdXQgPDwgIkV4aXRpbmcgdGVzdCwuIHRoZSB3aG9sZSBtZWFzdXJpbmcgdG9vayAiIDw8IHRvdGFsX3RpbWVfbXMgPDwgIm1zIjsKICBzdGQ6OmNvdXQgPDwgIiAoIiA8PCB0b3RhbF90aW1lX21zLzEwMDAgPDwgInNlY29uZHMgb3IgIiA8PCB0b3RhbF90aW1lX21zLygxMDAwKjYwKSA8PCAiIG1pbnV0ZXMpIiA8PCBzdGQ6OmVuZGw7IAogICByZXR1cm4gMDsKfQ==
-
upload with new input
-
result: Success time: 10.64s memory: 3032 kB returned value: 0
********** Times in microseconds (us) ********** Elements SORT(List, Vector) elements , list_time , vector_time 10 , 3 , 2 100 , 11 , 9 1000 , 134 , 51 10000 , 1561 , 604 20000 , 3617 , 1334 30000 , 5305 , 2014 40000 , 7553 , 2666 50000 , 10680 , 3473 100000 , 23594 , 7295 150000 , 40542 , 11440 200000 , 56559 , 15667 250000 , 78068 , 19724 300000 , 113920 , 23863 350000 , 125641 , 28211 400000 , 145099 , 33051 450000 , 161807 , 37576 500000 , 192667 , 41732 550000 , 251834 , 46071 600000 , 274409 , 51250 650000 , 278399 , 55559 700000 , 309250 , 60115 750000 , 325837 , 65044 800000 , 367590 , 69802 850000 , 379411 , 74055 900000 , 417667 , 78844 950000 , 433513 , 83645 1000000 , 478211 , 87523 1000000 , 459456 , 88269 Exiting test,. the whole measuring took 10670ms (10seconds or 0 minutes)
15s list vs vector
SORT using std::sort (vector) and std::list::sort
SORT using std::sort (vector) and std::list::sort


