Я не могу понять следующее, и я надеюсь, что кто-то может пролить свет на это для меня:
В C ++, если я создаю вектор тестовых данных, содержащий 2M различных битов текста (testdata), затем создаю карту, используя эти строки в качестве значений индекса, а затем ищем все значения, например:
//Create test data
for(int f=0; f<loopvalue; f++)
{
stringstream convertToString;
convertToString << f;
string strf = convertToString.str();
testdata[f] = "test" + strf;
}
time_t startTimeSeconds = time(NULL);
for(int f=0; f<2000000; f++) testmap[ testdata[f] ] = f; //Write to map
for(int f=0; f<2000000; f++) result = testmap[ testdata[f] ]; //Lookup
time_t endTimeSeconds = time(NULL);
cout << "Time taken " << endTimeSeconds - startTimeSeconds << "seconds." << endl;
Требуется 10 секунд.
Если я сделаю, по крайней мере, то же самое в PHP:
<?php
$starttime = time();
$loopvalue = 2000000;
//fill array
for($f=0; $f<$loopvalue; $f++)
{
$filler = "test" . $f;
$testarray[$filler] = $f;
}
//look up array
for($f=0; $f<$loopvalue; $f++)
{
$filler = "test" . $f;
$result = $testarray[$filler];
}
$endtime = time();
echo "Time taken ".($endtime-$starttime)." seconds.";
?>
... это займет всего 3 секунды.
Учитывая, что PHP написан на C, кто-нибудь знает, как PHP достигает этого гораздо более быстрого поиска по текстовому индексу?
Спасибо
C