void fill_range_strings() { boost::container::string model_s; model_s.append(sizeof(boost::container::string), '*'); //sorted_unique_range_int sorted_unique_range_string.resize(NElements); std::stringstream sstr; for(std::size_t i = 0, max = sorted_unique_range_string.size(); i != max; ++i){ sstr.str(std::string()); sstr << std::setfill('0') << std::setw(10) << i; sorted_unique_range_string[i] = model_s; const std::string &s = sstr.str(); sorted_unique_range_string[i].append(s.begin(), s.end()); } //sorted_range_string sorted_range_string = sorted_unique_range_string; sorted_range_string.insert(sorted_range_string.end(), sorted_unique_range_string.begin(), sorted_unique_range_string.end()); std::sort(sorted_range_string.begin(), sorted_range_string.end()); //random_range_string std::srand(0); random_range_string.assign(sorted_range_string.begin(), sorted_range_string.end()); std::random_shuffle(random_range_string.begin(), random_range_string.end()); //random_unique_range_string std::srand(0); random_unique_range_string.assign(sorted_unique_range_string.begin(), sorted_unique_range_string.end()); std::random_shuffle(random_unique_range_string.begin(), random_unique_range_string.end()); }
void fill_range_ints() { //sorted_unique_range_int sorted_unique_range_int.resize(NElements); for(std::size_t i = 0, max = sorted_unique_range_int.size(); i != max; ++i){ sorted_unique_range_int[i] = static_cast<int>(i); } //sorted_range_int sorted_range_int = sorted_unique_range_int; sorted_range_int.insert(sorted_range_int.end(), sorted_unique_range_int.begin(), sorted_unique_range_int.end()); std::sort(sorted_range_int.begin(), sorted_range_int.end()); //random_range_int std::srand(0); random_range_int.assign(sorted_range_int.begin(), sorted_range_int.end()); std::random_shuffle(random_range_int.begin(), random_range_int.end()); //random_unique_range_int std::srand(0); random_unique_range_int.assign(sorted_unique_range_int.begin(), sorted_unique_range_int.end()); std::random_shuffle(random_unique_range_int.begin(), random_unique_range_int.end()); }
std::size_t generate_elements(boost::container::vector<T> &elements, std::size_t L, std::size_t NK, Compare comp) { elements.resize(L); boost::movelib::unique_ptr<std::size_t[]> key_reps(new std::size_t[NK ? NK : L]); std::srand(0); for (std::size_t i = 0; i < (NK ? NK : L); ++i) { key_reps[i] = 0; } for (std::size_t i = 0; i < L; ++i) { std::size_t key = NK ? (i % NK) : i; elements[i].key = key; } ::random_shuffle(elements.data(), elements.data() + L); ::random_shuffle(elements.data(), elements.data() + L); for (std::size_t i = 0; i < L; ++i) { elements[i].val = key_reps[elements[i].key]++; } std::size_t split_count = L / 2; std::stable_sort(elements.data(), elements.data() + split_count, comp); std::stable_sort(elements.data() + split_count, elements.data() + L, comp); return split_count; }