【发布时间】:2014-03-30 22:17:21
【问题描述】:
我有几个长度为 2000 - 3000 个字符的字符串,我想将每个长度为 X 的子字符串散列到一个 unordered_multimap。因此,我逐个字符地遍历每个字符串以确定每个哈希值。 substr 函数创建一个新字符串,将 std::pair 插入到多重映射中也是如此。我想尽量避免。有没有办法解决这个问题?
伪代码示例:
For each String str:
For i to str.length - hashlength
hash = str.substr(i, hashlength) //A
unordered_multimap.insert({{hash, i}}); //B
我希望 A 和 B 部分使用尽可能少的构造函数调用。
【问题讨论】:
-
启用C++11并将哈希声明为
string&& -
如果 hash 是
std::string你可以在循环中重用然后你调用 usehash.assign(str.begin() + i, str.begin() + i + hashlength)并且至少保存一个分配。 -
如果要将其存储在地图中,则至少需要一个构造
-
@texasbruce 这有什么帮助?
-
你可以存储一对迭代器
标签: c++ string hashmap hashtable