【问题标题】:Map string in cppcpp中的映射字符串
【发布时间】:2019-03-08 20:08:58
【问题描述】:

我想将所有子字符串存储在 unordered_map 中。我正在考虑使用 substr stl 的函数,但最坏情况下的时间复杂度是 O(n),当我要在循环内使用字符串的所有索引时,它会给我 O(n^2)。

我们能否在 O(n) 中通过使用指针或其他东西来做一些更好的事情,以便我以后可以访问子字符串。

【问题讨论】:

  • 尝试字符串视图。您可以以非常有效的方式表示子字符串。但是,无论您尝试什么,在地图中存储 all 子字符串都会很慢。使用地图作为给定子字符串的已计算机结果的缓存会好得多
  • 好奇你打算如何使用这张地图,我怀疑这是我们应该关注的地方

标签: c++ string maps


【解决方案1】:

如果您不想将子字符串复制到地图中,则可以使用std::string_view 来存储子字符串的视图。这会花费您一个指针和一个长度,因此它尽可能高效。

您可以构建一个包含所有子字符串的向量,例如

int main()
{
    std::string word = "word";
    auto size = word.size();
    std::vector<std::string_view> parts;
    parts.reserve(size * (size + 1)/2); // reserve space for all the sub strings
    for(size_t i = 0; i < size; ++i)
        for(size_t j = i; j < size; ++j)
            parts.emplace_back(word.data() + i, j - i + 1);
}   

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-19
    • 2012-01-23
    • 2014-07-14
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    相关资源
    最近更新 更多