回答編集履歴

1

修正方法の追加

2021/03/09 05:16

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -3,3 +3,71 @@
3
3
  `table[hi].push_back(HashEntry(k, v));` または
4
4
 
5
5
  `table[hi].emplace_back(k, v);` に変更すればいいんじゃないのかな?
6
+
7
+
8
+
9
+ **追記**
10
+
11
+ 質問のコードを見て、修正してみました。
12
+
13
+ ```diff
14
+
15
+ else {
16
+
17
+ - table[hi][k]=v; //keyを挿入する
18
+
19
+ - //(1)ここの書き方が間違っているのでしょうか。
20
+
21
+ + table[hi].emplace_back(k, v);
22
+
23
+ ndata++; // データ数を更新する
24
+
25
+
26
+
27
+ - list<HashEntry> l = table[hi];
28
+
29
+ + list<HashEntry>& l = table[hi];
30
+
31
+
32
+
33
+ - // 同じ key がすでに登録されたかを記録する.exists == true なら登録済み
34
+
35
+ - bool exists = false;
36
+
37
+ if( !l.empty() ){
38
+
39
+ list<HashEntry>::iterator itr;
40
+
41
+ for(itr = l.begin(); itr != l.end(); itr++) {
42
+
43
+ if (itr->key == k){
44
+
45
+ - exists = true; // あった
46
+
47
+ - // (2)ここには何を追加すればいいのでしょうか。
48
+
49
+ + v = itr->value;
50
+
51
+ return true;
52
+
53
+ - break;
54
+
55
+ }
56
+
57
+ - else return false; // なかった
58
+
59
+ }
60
+
61
+ }
62
+
63
+
64
+
65
+ - return exists;
66
+
67
+ + return false;
68
+
69
+ }
70
+
71
+ ```
72
+
73
+ これでいいのでしょうか?