c++11 速度比较/成本 std::hash<std::string> 等于 std::string 直接等于 2 个大字符串

标签 c++11 hash 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
}

最佳答案

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/

相关文章:

c++ - 有没有办法从下面的数据中唯一地构建一个整数?

php - PHP crypt() 函数的 salt 参数和返回值如何工作?

c++ - 专用于私有(private)成员类的 std::hash

c++ - 具有不同参数 C++ 的工厂注册表

c++ - 使用临时对象是否有性能优势?

java - MS SQL服务器: Securing column level data

C++11 : Are there reasons why some Regular Types should not have `std::hash` specialised?

C++ std::hash specilization trait 编译错误

c++ - 数据成员的编译时多态性

C++11 std::promise 的段错误