【问题标题】:How can PHP string indexed arrays be achieved efficiently in C++如何在 C++ 中高效实现 PHP 字符串索引数组
【发布时间】:2011-11-07 17:23:25
【问题描述】:

我一直在尝试在大列表中搜索文本,发现使用 PHP 数组似乎是一种快速的方法。

例如如果您有大量地名和相关的邮政编码,您可以将它们读入 PHP 数组,如下所示:

$place[‘place name here’] = “postcode”;

然后要查找,只需将要查找的位置插入数组:

$postcode_sought = $place[‘place I want to look up’];

我认为我可以使用 C++ 加快速度,但当然 C++ 不允许(据我所知)以字符串为索引的数组。

我能想到的唯一方法是为地点和邮政编码创建向量,并循环通过地点向量寻找匹配项,但重复的字符串比较会像我预期的那样永远持续下去。我还尝试过对文本进行散列处理,但仍然无法达到 PHP 的速度。

我认为 PHP 是用 C 编写的,所以我的问题是 C 如何设法为 PHP 创建这个字符串索引名称功能? 我不是在寻找实际的代码或任何东西,只是在我看来,必须有一些基本技术用于此,我只是想知道是否有人可以简要解释一下。

提前致谢。 C

【问题讨论】:

  • 不存在以字符串为索引的数组。你正在寻找不存在的东西。 PHP 恰好对数组使用与映射相同的语法。请参阅en.wikipedia.org/wiki/Hash_table,了解地图通常是如何实现的。

标签: php c++ c arrays indexing


【解决方案1】:

我认为我可以使用 C++ 加快速度,但当然 C++ 不允许(据我所知)以字符串为索引的数组。

确实如此,您可以使用 std::map 作为关联数组。

【讨论】:

  • std::unordered_map 更适合字符串
  • @Dani:是的,这是正确的,但它来自std::tr1::unordered_mapstd::unordered_map,即:属于tr1 或C++11。
  • 不。 这不是一个很好的谣言传播。数组和地图有很大的区别; PHP 对两者使用相同的语法这一事实并没有改变这一点。
  • @Dani:不是每个人都不允许使用它们。如果允许,是的,std::unordered_map 是比std::map 更好的选择,在这种情况下对于字符串。
【解决方案2】:

您可以尝试使用 Berkeley DB。过去它是最快的,但默认情况下它是面向磁盘的。我不知道你是否可以在内存中运行它,但你总是可以从 tmpfs 挂载目录。

PHP 可能使用一些外部类来进行哈希表。通过编写快速搜索算法,您可以走得更远。对键进行排序并检查中间的键。然后再次在中间,直到你找到钥匙。您也可以将 MD5() 用于键,因为它比纯字符串比较更快。

【讨论】:

    【解决方案3】:

    C 和 C++ 只允许整数类型作为数组索引,而字符串甚至不是 C/C++ 上的类型,它们实际上是一个字符数组。
    如上所述,请使用std::map 或类似名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-25
      • 2020-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多