作者ric2k1 (Ric)
看板EE_DSnP
标题Re: [问题] myHash 的 functions
时间Tue Jan 4 21:28:30 2011
※ 引述《TommyKSHS (汤米)》之铭言:
: 我想问的是
: check() 的 comment :
: 127 // check if k is in the hash...
: 128 // if yes, update n and return true;
: 129 // else return false;
: 就是 update n 的意思我不太懂…
: 意思是 check () 会改变 hash table 里面的某项元素吗?
bool check(const HashKey& k, HashData& n) const
check 的意思就是检查 hash 里面是否有已经含有 HashNode(k, *) 的 data,
如果没找到,return false;
如果找到,就把项对应的 HashData assign 到 n 上面 (因为 n 是用 ref传进来的)
这样做的原因有三:
1. 检查的时候顺便取得资料。
2. 拿到的 n 时实际上存在 Hash 里头的 HashData (其分身),
而不只是它的一份 copy (if pass by object)
3. 省去 copy HashData 的时间
: 另外我也不懂 forceInsert() 和 replaceInsert() 的用意是什麽 Orz
: ( 已经爬过文了还是不懂 QQ
void forceInsert(const HashKey& k, const HashData& d)
通常用在 check() return false 之後,
就是确定 k 不在 Hash 里面之後,呼叫 forceInsert 把你想要 insert 的 data 存入
Example:
if (hash.check(k, n)) {
// This is n is a valid data
}
else {
// d is what you want to insert
forceInsert(k, d);
}
bool replaceInsert(const HashKey& k, const HashData& d)
先检查 Hash 里面是否有含有 HashKey = k 的 HashNode,
如果不在,就 insert and return true (successful)
否则 ==> HashNode(k, *) 本来就在 Hash 里面,
强制将它取代成 HashNode(k, d) 且 return false
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.36.54.155
1F:推 TommyKSHS:嗯嗯 谢谢老师! 我懂了 01/04 21:41