我不明白下面,我希望有人能提供一些線索就可以了我:C++地圖查找性能與PHP數組查找性能
在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如何實現這種快得多的文本索引查找?
感謝 Ç
將string-keyed映射切換爲'std :: unordered_map',並對其差異感到驚訝。你可以爲其他地圖做同樣的事情,來思考它。如果你沒有那個類,可以考慮''中的'std :: tr1 :: unordered_map'。 –
你爲C++代碼使用了哪些編譯器設置?特別是哪種編譯器和哪種優化級別? – tokage
Is result = testmap [testdata [f]] ** = f **一個錯字? –