mirror of
https://github.com/boostorg/container.git
synced 2025-08-04 06:54:27 +02:00
Add custom random_shuffle as some old compiler implementations self-swap some elements.
This commit is contained in:
@@ -37,6 +37,19 @@ void compare_times(cpu_times time_numerator, cpu_times time_denominator){
|
|||||||
std::cout << "----------------------------------------------" << '\n' << std::endl;
|
std::cout << "----------------------------------------------" << '\n' << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template< class RandomIt >
|
||||||
|
void random_shuffle( RandomIt first, RandomIt last )
|
||||||
|
{
|
||||||
|
typedef typename boost::container::iterator_traits<RandomIt>::difference_type difference_type;
|
||||||
|
difference_type n = last - first;
|
||||||
|
for (difference_type i = n-1; i > 0; --i) {
|
||||||
|
difference_type j = std::rand() % (i+1);
|
||||||
|
if(j != i) {
|
||||||
|
boost::adl_move_swap(first[i], first[j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
boost::container::vector<int> sorted_unique_range_int;
|
boost::container::vector<int> sorted_unique_range_int;
|
||||||
boost::container::vector<int> sorted_range_int;
|
boost::container::vector<int> sorted_range_int;
|
||||||
boost::container::vector<int> random_unique_range_int;
|
boost::container::vector<int> random_unique_range_int;
|
||||||
@@ -57,11 +70,11 @@ void fill_range_ints()
|
|||||||
//random_range_int
|
//random_range_int
|
||||||
std::srand(0);
|
std::srand(0);
|
||||||
random_range_int.assign(sorted_range_int.begin(), sorted_range_int.end());
|
random_range_int.assign(sorted_range_int.begin(), sorted_range_int.end());
|
||||||
std::random_shuffle(random_range_int.begin(), random_range_int.end());
|
::random_shuffle(random_range_int.begin(), random_range_int.end());
|
||||||
//random_unique_range_int
|
//random_unique_range_int
|
||||||
std::srand(0);
|
std::srand(0);
|
||||||
random_unique_range_int.assign(sorted_unique_range_int.begin(), sorted_unique_range_int.end());
|
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());
|
::random_shuffle(random_unique_range_int.begin(), random_unique_range_int.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
boost::container::vector<boost::container::string> sorted_unique_range_string;
|
boost::container::vector<boost::container::string> sorted_unique_range_string;
|
||||||
@@ -93,11 +106,11 @@ void fill_range_strings()
|
|||||||
//random_range_string
|
//random_range_string
|
||||||
std::srand(0);
|
std::srand(0);
|
||||||
random_range_string.assign(sorted_range_string.begin(), sorted_range_string.end());
|
random_range_string.assign(sorted_range_string.begin(), sorted_range_string.end());
|
||||||
std::random_shuffle(random_range_string.begin(), random_range_string.end());
|
::random_shuffle(random_range_string.begin(), random_range_string.end());
|
||||||
//random_unique_range_string
|
//random_unique_range_string
|
||||||
std::srand(0);
|
std::srand(0);
|
||||||
random_unique_range_string.assign(sorted_unique_range_string.begin(), sorted_unique_range_string.end());
|
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());
|
::random_shuffle(random_unique_range_string.begin(), random_unique_range_string.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
|
@@ -35,7 +35,7 @@
|
|||||||
Name="VCCustomBuildTool"/>
|
Name="VCCustomBuildTool"/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCLinkerTool"
|
Name="VCLinkerTool"
|
||||||
AdditionalDependencies="winmm.lib"
|
AdditionalDependencies="winmm.lib libboost_chrono-vc71-mt-gd-1_61.lib libboost_timer-vc71-mt-gd-1_61.lib libboost_system-vc71-mt-gd-1_61.lib"
|
||||||
OutputFile="$(OutDir)/bench_set_d.exe"
|
OutputFile="$(OutDir)/bench_set_d.exe"
|
||||||
LinkIncremental="1"
|
LinkIncremental="1"
|
||||||
AdditionalLibraryDirectories="../../../../stage/lib"
|
AdditionalLibraryDirectories="../../../../stage/lib"
|
||||||
@@ -43,8 +43,7 @@
|
|||||||
ProgramDatabaseFile="$(OutDir)/bench_set.pdb"
|
ProgramDatabaseFile="$(OutDir)/bench_set.pdb"
|
||||||
SubSystem="1"
|
SubSystem="1"
|
||||||
TargetMachine="1"
|
TargetMachine="1"
|
||||||
FixedBaseAddress="1"
|
FixedBaseAddress="1"/>
|
||||||
/>
|
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCMIDLTool"/>
|
Name="VCMIDLTool"/>
|
||||||
<Tool
|
<Tool
|
||||||
|
Reference in New Issue
Block a user