Created
April 5, 2014 15:32
-
-
Save alecthomas/9993449 to your computer and use it in GitHub Desktop.
Benchmarks for insertion of random values into C++ containers maintaining order
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <algorithm> | |
#include <cstdlib> | |
#include <vector> | |
#include <set> | |
#include <list> | |
#include <chrono> | |
#include <iostream> | |
using namespace std; | |
using namespace std::chrono; | |
void insert_vector_ordered(int n) { | |
vector<int> v; | |
for (int i = 0; i < n; i++) { | |
int w = rand(); | |
auto it = lower_bound(v.begin(), v.end(), w); | |
v.insert(it, w); | |
} | |
} | |
void insert_vector_then_sort(int n) { | |
vector<int> v; | |
for (int i = 0; i < n; i++) { | |
int w = rand(); | |
v.push_back(w); | |
} | |
sort(v.begin(), v.end()); | |
} | |
void insert_list_ordered(int n) { | |
list<int> v; | |
for (int i = 0; i < n; i++) { | |
int w = rand(); | |
auto it = lower_bound(v.begin(), v.end(), w); | |
v.insert(it, w); | |
} | |
} | |
void insert_list_then_sort(int n) { | |
list<int> v; | |
for (int i = 0; i < n; i++) { | |
int w = rand(); | |
v.push_back(w); | |
} | |
v.sort(); | |
} | |
void insert_set(int n) { | |
set<int> s; | |
for (int i = 0; i < n; i++) { | |
int w = rand(); | |
s.insert(w); | |
} | |
} | |
void timeit(int n, void (*test)(int)) { | |
high_resolution_clock::time_point start = high_resolution_clock::now(); | |
test(n); | |
high_resolution_clock::time_point end = high_resolution_clock::now(); | |
milliseconds ms = duration_cast<milliseconds>(end - start); | |
cout << n << " random values inserted in " << ms.count() << "ms" << endl; | |
} | |
int main() { | |
cout << "insert_vector_ordered" << endl; | |
timeit(100, insert_vector_ordered); | |
timeit(1000, insert_vector_ordered); | |
timeit(10000, insert_vector_ordered); | |
timeit(100000, insert_vector_ordered); | |
// timeit(1000000, insert_vector_ordered); | |
cout << "insert_vector_then_sort" << endl; | |
timeit(100, insert_vector_then_sort); | |
timeit(1000, insert_vector_then_sort); | |
timeit(10000, insert_vector_then_sort); | |
timeit(100000, insert_vector_then_sort); | |
timeit(1000000, insert_vector_then_sort); | |
cout << "insert_list_ordered" << endl; | |
timeit(100, insert_list_ordered); | |
timeit(1000, insert_list_ordered); | |
timeit(10000, insert_list_ordered); | |
timeit(100000, insert_list_ordered); | |
// timeit(1000000, insert_list_ordered); | |
cout << "insert_list_then_sort" << endl; | |
timeit(100, insert_list_then_sort); | |
timeit(1000, insert_list_then_sort); | |
timeit(10000, insert_list_then_sort); | |
timeit(100000, insert_list_then_sort); | |
timeit(1000000, insert_list_then_sort); | |
cout << "insert_set" << endl; | |
timeit(100, insert_set); | |
timeit(1000, insert_set); | |
timeit(10000, insert_set); | |
timeit(100000, insert_set); | |
timeit(1000000, insert_set); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment