bja*_*fly 4 hash c++11 stdhash
您好,我对 std::hash 有一个问题,如果我有 2 个大字符串进行比较,并且我愿意接受 std::hash 在大多数情况下比较相等,那么执行类似以下操作而不是直接执行操作是否更符合性能字符串比较?还要考虑这将在循环中读取文件,因此它将被执行多次,这是大文件的问题。
std::string largeString1; // large but not huge meaning a line of text like up to lets say 500 chars
std::string largeString2;
// is this better than then next block in terms of performance and if so by how much?
if ( std::hash<std::string>(largeString1) == std::hash<std::string>(largeString2) )
{
// true logic
}
// is this a lot slower than the previous
if ( largeString1 == largeString2 )
{
// true logic
}
Run Code Online (Sandbox Code Playgroud)
Moo*_*uck 11
std::hash<std::string>(largeString1) == std::hash<std::string>(largeString2)
Run Code Online (Sandbox Code Playgroud)
会慢很多
largeString1 == largeString2
Run Code Online (Sandbox Code Playgroud)
对字符串进行哈希处理涉及迭代其整个长度。因此,哈希比较需要代码一次迭代两个字符串的完整长度,并通过复杂的方程运行它们。直接相等代码只是同时迭代它们,并在发现差异时立即退出。相信图书馆。如果==可以做得更快,他们就会做得更快。
如果您要多次比较每个字符串,那么提前散列一次并仅比较散列可能会更快,但您仍然必须确认匹配,因为比较散列可能会给出误报。它只会使“不匹配”的情况更快。
| 归档时间: |
|
| 查看次数: |
6685 次 |
| 最近记录: |