【问题标题】:Search all keys with a prefix in map of C++ [duplicate]在 C++ 的映射中搜索所有带有前缀的键 [重复]
【发布时间】:2015-08-13 21:11:13
【问题描述】:

我正在使用地图来存储数据。该地图具有非常大的数据。我想找到具有前缀的键,结果项的数量限制为 50。我想使用最快的方式进行搜索,而不是遍历整个地图并检查,因为地图已经是结构化的键值容器。

例如,如果我有一些对:

<"foo123", value>

<"foo234", value>

<"bar12", value>

<"foo456", value> 

<"bar200", value>

如果我搜索“foo”,它会为我提供建议

foo123, foo234, foo456. 

【问题讨论】:

  • 您可以使用std::find_if() 并提供您自己的函数来检查前缀。
  • @πάντα ῥεῖ 这是线性时间,在这种情况下完全没有必要。
  • 我在问之前研究了你上面提供的问题。我看到 lower_bound 返回找到键的第一个迭代器。你能指导我如何找到下一个。非常感谢!
  • 找到迭代器后,您可以简单地递增它,直到它不再与前缀匹配或 50 遍。但是,我建议您关闭这个问题。将来,如果有一个与您自己的问题非常相似的问题,也许您应该参考它,并解释它与您遇到的问题之间的差异是什么。

标签: c++ dictionary


【解决方案1】:

想到了两种方法:

  • 第一个是称为trie 的特殊容器,C++ 标准库中没有与之对应的容器,但您应该能够轻松找到工作版本。

  • 第二种方法简单地使用了这样一个事实:在std::map 中,键"foo" 排在"foo123" 之前。使用 upper_boundlower_bound 函数快速找到起始范围,然后使用线性搜索。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-14
    • 1970-01-01
    • 2021-08-23
    • 2017-09-19
    相关资源
    最近更新 更多