gpt4 book ai didi

php - C++ map 查找性能与 PHP 数组查找性能

转载 作者:行者123 更新时间:2023-11-30 00:39:44 25 4
gpt4 key购买 nike

我无法理解以下内容,希望有人能为我提供一些启示:

在 C++ 中,如果我创建一个包含 2M 不同文本位 (testdata) 的测试数据 vector ,然后使用这些字符串作为索引值创建一个映射,然后查找所有值,如下所示:

 //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

最佳答案

你的循环不是绝对等价的算法。请注意,在 C++ 版本中,您有

  1. testmap[ testdata[f] ] - 这实际上是一个查找+插入
  2. testmap[ testdata[f] ] - 2 次查找

在 PHP 版本中,您只需在第一个循环中插入并在第二个循环中查找。

PHP 是解释型的——通常如果您使用 PHP 编写代码速度更快,请先检查代码! ;-)

关于php - C++ map 查找性能与 PHP 数组查找性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8064234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com