你好,我有一个关于 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
}
最佳答案
std::hash<std::string>(largeString1) == std::hash<std::string>(largeString2)
会比
慢largeString1 == largeString2
散列字符串涉及遍历它的整个长度。因此,哈希比较需要代码一次迭代两个字符串的全长,并通过复杂的方程式运行它们。直接相等代码只是同时迭代它们,并在发现差异时立即退出。相信图书馆。如果 ==
可以做得更快,他们就会做得更快。
如果你要多次比较每个字符串,然后提前散列一次并只比较散列可能会更快,但你仍然必须确认匹配,因为比较散列可以给出误报。它只会使“不匹配”的情况更快。
关于c++11 速度比较/成本 std::hash<std::string> 等于 std::string 直接等于 2 个大字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17887146/