1

嗨,我有一个关于 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
}
4

1 回答 1

5
std::hash<std::string>(largeString1) == std::hash<std::string>(largeString2)

会远

largeString1 == largeString2

散列一个字符串涉及迭代它的整个长度。因此,哈希比较需要代码一次迭代两个字符串的全长,并通过复杂的方程运行它们。直接相等代码只是同时迭代它们,并在发现差异的那一刻立即退出。相信图书馆。如果==可以做得更快,他们会做得更快。

如果您要多次比较每个字符串,那么提前一次散列并仅比较散列可能会更快,但您仍然需要确认匹配,因为比较散列可能会产生误报。它只会使“不匹配”的情况更快。

于 2013-07-26T17:16:44.690 回答