這篇文章主要介紹“C++為什么要保證哈希不會(huì)拋出異常”,在日常操作中,相信很多人在C++為什么要保證哈希不會(huì)拋出異常問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C++為什么要保證哈希不會(huì)拋出異?!钡囊苫笥兴鶐椭?!接下來,請跟著小編一起來學(xué)習(xí)吧!
創(chuàng)新互聯(lián)公司是一家專業(yè)從事成都做網(wǎng)站、成都網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)的品牌網(wǎng)絡(luò)公司。如今是成都地區(qū)具影響力的網(wǎng)站設(shè)計(jì)公司,作為專業(yè)的成都網(wǎng)站建設(shè)公司,創(chuàng)新互聯(lián)公司依托強(qiáng)大的技術(shù)實(shí)力、以及多年的網(wǎng)站運(yùn)營經(jīng)驗(yàn),為您提供專業(yè)的成都網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)及網(wǎng)站設(shè)計(jì)開發(fā)服務(wù)!
C.89:保證哈希不會(huì)拋出異常
哈希容器的用戶間接地使用哈希功能,不希望簡單的操作發(fā)生異常。這是標(biāo)準(zhǔn)庫的要求。
Example, bad(反面示例)
template<>
struct hash { // thoroughly bad hash specialization
using result_type = size_t;
using argument_type = My_type;
size_t operator() (const My_type & x) const
{
size_t xs = x.s.size();
if (xs < 4) throw Bad_My_type{}; // "Nobody expects the Spanish inquisition!"
return hash()(x.s.size()) ^ trim(x.s);
}
};
int main()
{
unordered_map m;
My_type mt{ "asdfg" };
m[mt] = 7;
cout << m[My_type{ "asdfg" }] << '\n';
}
如果你已經(jīng)定義了哈希特化,爭取簡單地實(shí)現(xiàn)為通過異或和標(biāo)準(zhǔn)庫哈希特化的組合。
提示拋出異常的哈希。
到此,關(guān)于“C++為什么要保證哈希不會(huì)拋出異常”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!