我有几个字符串的长度为2000 - 3000个字符,我想将长度为X的每个子字符串散列为一个unordered_multimap。因此,我逐字符遍历每个字符串以确定每个散列。 substr函数创建一个新的字符串,并且将一个std :: pair插入到multimap中。我想尽可能避免。有没有办法解决这个问题?如何在不创建新对象的情况下引用substr?
伪码示例:
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并将hash声明为'string &&' – texasbruce
如果hash是一个'std :: string',您可以在循环中重用,那么您可以调用use'hash.assign(str.begin()+ i,str .begin()+ i + hashlength)'并且至少保存一个分配。 –
如果你想将它存储在地图中,那么至少需要**一**结构 – Paranaix