嗨我有一個關於std :: hash的問題,如果我有2個大字符串比較,我願意接受std :: hash在大多數情況下會比較平等,而不是直接進行字符串比較,而是更符合性地執行類似以下內容的操作?另外考慮這將在循環讀取一個文件,所以它會被執行幾次,這是大型文件的關注。C++ 11速度比較/成本標準差::散列<std::string>等於與std ::字符串直接等於兩個大字符串
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
}
如果兩個不同字符串之間存在散列衝突會怎樣?這兩種比較在這種情況下會產生不同的結果。此外,大多數(全部?)實現將實現字符串比較作爲渴望的比較,在找到第一個不匹配時退出;計算哈希值時不是這種情況。 – Praetorian
是的第二次想到這可能不是一個很好的問題,我認爲通過散列字符串我以某種方式獲得性能,不必通過字符比較來做char,但是當你和Mooing Duck表明我應該相信lib實現是快速默認。 – bjackfly