SlideShare ist ein Scribd-Unternehmen logo
1 von 106
クソザコ鳥頭が
非順序連想コンテナに
入門してみた
2015/12/05 鳥頭かりやマン
1
で、お前だれよ?
2
で、お前だれよ?
■名前
⇒刈谷 満(鳥頭かりやマン)
■職業
⇒働かないタイプの社畜(老い先短い)
■普段使用してる言語
⇒ ExcelHogan(好きとは言ってない)
■好きな言語
⇒ C++、Perl5(できるとは言ってない) 3
何でクソザコが
発表してんの?
4
何でクソザコが発表してんの?
※ 意味
てめぇ、ありがたくも cpprefjp 編集させて
やってるんだから Boost.勉強会で発表ぐ
らいしろやゴルァ!
せっかく cpprefjp で
unordered やったんだから、
Boost.勉強会で発表でも
どうですか?※
5
非順序連想コンテナ
とは?
6
非順序連想コンテナとは?
• 今すぐ使用すべき
連想界のスーパーコンテナ
• 速い(検索が)
• 小さい(メモリ使用量が)
• 長い(名前が)
※連想コンテナ比
※
※
※
7
非順序連想コンテナって
どんな構造?
8
非順序連想コンテナって
どんな構造?
非順序連想コンテナ鉄の掟
1. 非順序連想コンテナの要素は「bucket」に
分けて入れられる。
2. 同じハッシュコードのキーは同じ「bucket」
に現れる。
3. 要素が追加されると「bucket」の数は自動
で増えるので、「bucket」あたりの平均要
素数は限度以下に保たれる。
from C++規格書勝手訳
9
bucket?
バゲット?
©佐野研二郎 10
bucket?
bucket
【可算名詞】
バケツ; 手おけ; つるべ.
from 研究社 新英和中辞典
11
非順序連想コンテナって
どんな構造?
つまり…
12
非順序連想コンテナって
どんな構造?
非順序連想コンテナ鉄の掟
1. 非順序連想コンテナの要素はバケツに分
けて入れられる。
13
非順序連想コンテナって
どんな構造?
バケツが何個かあって…
bucket_count() = 3, size() = 0 (empty())
0 1 2 14
非順序連想コンテナって
どんな構造?
赤城さんを入渠追加する場合…
ハッシュ関数でハッシュ値を計算して…
ハッシュ値:55ハッシュ関数
(弾薬最大)
insert(const value_type&) とか…
15
非順序連想コンテナって
どんな構造?
ハッシュ値に従って選ばれた
バケツに入れる!
size() = 1
0 1 2
この場合、
ハッシュ値「55」を
バケツ数「3」で割った
余り「1」に
16
非順序連想コンテナって
どんな構造?
非順序連想コンテナ鉄の掟
2. 同じハッシュコードのキーは同じバケツに
現れる。
17
非順序連想コンテナって
どんな構造?
雷電姉妹を追加する場合、
ハッシュ値は同じなので…
(姉妹だからしょうがないね…)
ハッシュ値:20ハッシュ関数
(弾薬最大)
雷と電で
ハッシュ値が
「衝突」している
18
非順序連想コンテナって
どんな構造?
同じバケツに入れるのです!
size() = 3
0 1 2
ハッシュ値「20」を
バケツ数「3」で割った
余り「2」に
19
非順序連想コンテナって
どんな構造?
ちなみに、バケツ要素数を得る
bucket_size() ってのがあって
0 1 2
0 1 2
20
非順序連想コンテナって
どんな構造?
バケツ内だけのイテレータも取れる
0 1 2
最初は
begin(2), cbegin(2)
最後は
end(2), cend(2)
例によって最後の
要素の一つ先
でもぶっちゃけ
使い道が
わからん…
21
非順序連想コンテナって
どんな構造?
さらに島風を追加する場合…
ハッシュ値:25ハッシュ関数
(弾薬最大)
22
非順序連想コンテナって
どんな構造?
ハッシュ値は違うけど、同じバケツに
なっちゃう…
0 1 2
この場合、
ハッシュ値「25」を
バケツ数「3」で割った
余り「1」に
23
非順序連想コンテナって
どんな構造?
ハッシュ値は違うけど、同じバケツに
なっちゃう…
0 1 2
でも、
ちょっと混み過ぎ
だよね…
24
非順序連想コンテナって
どんな構造?
非順序連想コンテナ鉄の掟
3. 要素が追加されるとバケツの数は自動で
増えるので、バケツあたりの平均要素数
は限度以下に保たれる。
load factor
「占有率」とか「負荷率」とか 25
非順序連想コンテナって
どんな構造?
バケツあたりの平均要素数は、
要素数4/バケツ数3=1.3333…
size() / bucket_count()
これは load_factor() で得られる。
0 1 2 26
非順序連想コンテナって
どんな構造?
上限も max_load_factor() で得られる。
デフォルトは1.0。
⇒やっぱり混み過ぎなので…
0 1 2 27
非順序連想コンテナって
どんな構造?
バケツが自動で増える!(リハッシュと言う)
bucket_count() = 4
(普通はバケツ数もっと増えます…)
0 1 2 3
リハッシュで
バケツが別れた
リハッシュされたら
バケツが分かれた
仲良しハッシュ値が
同じなのでリハッシュ
されてもバケツが
一緒なのです!
28
非順序連想コンテナって
どんな構造?
ちなみに…
29
非順序連想コンテナって
どんな構造?
↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
これ を こう
するのは結構大変なので、あらかじめ
バケツ数を増やしておくこともできる。
0 1 2 0 1 2 3
30
非順序連想コンテナって
どんな構造?
n 個以上バケツを確保しておく。
rehash(n)
リハッシュされずに n 個の要素が
格納できるだけのバケツを確保しておく。
reserve(n)
31
非順序連想コンテナって
どんな構造?
n 個以上バケツを確保しておく。
rehash(n)
リハッシュされずに n 個の要素が
格納できるだけのバケツを確保しておく。
reserve(n)
が!
32
非順序連想コンテナって
どんな構造?
ちょっと規格に問題があって、
reserve(n) だと n 個の要素が格納できない…
(LWG Issue 2156)
n を 1 つ増やしておくと良さそう…
cpprefjp の unordered_*::reserve にも書いてあるので見てみてください…
http://cpprefjp.github.io/reference/unordered_set/unordered_set/reserve.html
33
非順序連想コンテナって
どんな構造?
あと、max_load_factor() も
デフォルトの1.0 以外を指定できる!
max_load_factor(float)
でも、必ず指定した値になるとは限らないし、
特に要素格納してから設定するといろいろ
トラブるもとになるから、気をつけよう!
cpprefjp の unordered_*::max_load_factor にも書いてあるので見てみてください…
http://cpprefjp.github.io/reference/unordered_map/unordered_multimap/max_load_factor.html 34
で、実際のところ
実装はどうなってんの?
35
で、実際のところ
実装はどうなってんの?
実装を覗いてみました
libstdc++ (GCC)
libc++ (Clang)
boost.unordered
36
で、実際のところ
実装はどうなってんの?
ハッシュテーブルのよく見るイメージ図
from CodeZine のJavaセキュアコーディング入門
バケツ配列
(ノードへの
ポインタ配列)
同一バケツ内の
次の要素を指す
ポインタ
各要素
(ノード)
37
で、実際のところ
実装はどうなってんの?
実装見るまで私もそう思ってました…
from CodeZine のJavaセキュアコーディング入門
同一バケツ内の
次の要素を指す
ポインタ
各要素
(ノード)
バケツ配列
(ノードへの
ポインタ配列)
38
で、実際のところ
実装はどうなってんの?
問題点1
イテレータで
前に進むときに困る
iterator::operator()++
39
で、実際のところ
実装はどうなってんの?
from CodeZine のJavaセキュアコーディング入門
イテレータが
ココを指してる時は
いいけど…
次!
40
で、実際のところ
実装はどうなってんの?
from CodeZine のJavaセキュアコーディング入門
イテレータが
ココを指してる時は
いいけど…
イテレータが
ココを指してる時、
次に進めない…
次?
41
で、実際のところ
実装はどうなってんの?
from CodeZine のJavaセキュアコーディング入門
イテレータが
ココを指してる時は
いいけど…
イテレータが
ココを指してる時、
次に進めない…
そんなん
バケツ配列の次たどって
行けばええやん?
42
で、実際のところ
実装はどうなってんの?
イテレータが
ココを指してる時は
いいけど…
イテレータが
ココを指してる時、
次に進めない…
そんなん
バケツ配列の次たどって
行けばええやん?ダメ!ゼッタイ!
43
で、実際のところ
実装はどうなってんの?
イテレータに対する
操作は定数時間で
なければならない!
(ホントは償却定数時間ならいいんだけど、さすがにこれじゃダメ…)
44
で、実際のところ
実装はどうなってんの?
じゃあこんな感じ?
from CodeZine のJavaセキュアコーディング入門
各バケツの最後の
要素は次のバケツの
最初の要素を指す
45
で、実際のところ
実装はどうなってんの?
じゃあこんな感じ?
from CodeZine のJavaセキュアコーディング入門
各バケツの最後の
要素は次のバケツの
最初の要素を指す
libstdc++ 4.6.x までは
この時点でもうダメっぽい…
頼むよ GCC…
46
で、実際のところ
実装はどうなってんの?
問題点2
追加したときに困る
insert(const value_type&) とか
47
で、実際のところ
実装はどうなってんの?
例えばこの状態で…
from CodeZine のJavaセキュアコーディング入門
このバケツに
追加すると…
48
で、実際のところ
実装はどうなってんの?
例えばこの状態で…
from CodeZine のJavaセキュアコーディング入門
これを…
こうしなきゃ
ならない…
このバケツに
追加すると…
49
で、実際のところ
実装はどうなってんの?
例えばこの状態で…
from CodeZine のJavaセキュアコーディング入門
これを…
こうしなきゃ
ならない…
このバケツに
追加すると…
そんなん
バケツ配列の前(ry
50
で、実際のところ
実装はどうなってんの?
例えばこの状態で…
from CodeZine のJavaセキュアコーディング入門
これを…
こうしなきゃ
ならない…
このバケツに
追加すると…
そんなん
バケツ配列の前(ryダメ!ゼッタイ!
51
で、実際のところ
実装はどうなってんの?
1件 insert も
定数時間でなければ
ならない!
(これも償却定数時間ならいいんだけど、やっぱりダメ…)
52
で、実際のところ
実装はどうなってんの?
じゃあどうするの…
from CodeZine のJavaセキュアコーディング入門
こいつを頭に
つけちゃえば
いい!
つまり、
バケツ順に
並んでない…
53
で、実際のところ
実装はどうなってんの?
問題点3
削除の時も困る
erase(const key_type&) とか
54
で、実際のところ
実装はどうなってんの?
たとえば erase(const key_type&)
from CodeZine のJavaセキュアコーディング入門
ココをキー指定で
削除したいときは…
キーから
ハッシュ値を計算して
ここからたどって…
55
で、実際のところ
実装はどうなってんの?
たとえば erase(const key_type&)
from CodeZine のJavaセキュアコーディング入門
一つ前のポインタを
修正しなきゃならないけど…
要素を削除して…
どうやって
逆向きに
たどるねん…
56
で、実際のところ
実装はどうなってんの?
こんな感じ?
from CodeZine のJavaセキュアコーディング入門
ダミー
バケツ配列からは
一つ前の要素を指す
初っ端は
前が無いから
ダミーを指す
めっさ
カオス…
57
で、実際のところ
実装はどうなってんの?
その他
イメージ図には
普通描かれないけど、
いろいろある
58
で、実際のところ
実装はどうなってんの?
バケツ配列だって
アロケータで確保するだろJK
⇓
バケツ配列へのポインタが必要
59
で、実際のところ
実装はどうなってんの?
こんな感じ?
from CodeZine のJavaセキュアコーディング入門
ダミー
バケツ配列
へのポインタ
60
で、実際のところ
実装はどうなってんの?
バケツって
今何個あるんだっけ?
⇓
バケツ数
bucket_count()
61
で、実際のところ
実装はどうなってんの?
こんな感じ?
from CodeZine のJavaセキュアコーディング入門
ダミー
バケツ配列
へのポインタ
バケツ数
62
で、実際のところ
実装はどうなってんの?
要素数返すのに
いちいち数えてたらヤバい
(計算量的な意味で)
⇓
要素数
size()
63
で、実際のところ
実装はどうなってんの?
こんな感じ?
from CodeZine のJavaセキュアコーディング入門
ダミー
バケツ配列
へのポインタ
バケツ数
要素数
64
で、実際のところ
実装はどうなってんの?
さっき出てきた
max_load_factor()
は?
65
で、実際のところ
実装はどうなってんの?
こんな感じ?
from CodeZine のJavaセキュアコーディング入門
ダミー
バケツ配列
へのポインタ
バケツ数
要素数
最大負荷率
66
で、実際のところ
実装はどうなってんの?
ハッシュ関数、キー比較関数、アロケータは
どこ行った
⇓
ハッシュ関数、キー比較関数、アロケータ
hash_function()
key_eq()
get_allocator()
67
で、実際のところ
実装はどうなってんの?
こんな感じ?
from CodeZine のJavaセキュアコーディング入門
ダミー
バケツ配列
へのポインタ
バケツ数
要素数
最大負荷率
ハッシュ関数
オブジェクト
キー比較関数
オブジェクト
アロケータ
オブジェクト
実際のところ、これら3つは
大抵状態を持たないので、
空基底最適化によって
サイズを0にしている実装もある
(EBO:Empty Base Optimization)
68
で、実際のところ
実装はどうなってんの?
こんな感じ?
from CodeZine のJavaセキュアコーディング入門
ダミー
バケツ配列
へのポインタ
バケツ数
要素数
最大負荷率
ハッシュ関数
オブジェクト
キー比較関数
オブジェクト
アロケータ
オブジェクト
ちなみに、
このへんの左側の箱が
非順序連想コンテナの
オブジェクト本体になる
(あとはアロケータで確保)
69
で、実際のところ
実装はどうなってんの?
ちょっと
正しく理解出来てるか
自信が無かったので、
オブジェクトのサイズを
実際に見てみた
70
で、実際のところ
実装はどうなってんの?
対象
libc++ 3.0~3.8(Clang)
libstdc++ 4.6.4~6.0.0(GCC)
boost.unordered 1.47~1.59
いずれも、long とポインタが64bitのケース
(LP64モデル)
71
で、実際のところ
実装はどうなってんの?
調べ方
基本、sizeof(unordered_set<int>)を見てみる。
加えて、各関数オブジェクトに 64bit(8バイト)
の状態を持たせたケースも見てみる。
72
で、実際のところ
実装はどうなってんの?
基本 ハッシュや
キー比較に
8バイト
アロケータに
8バイト
全部に
8バイト
(計24バイト)
libc++ 3.0~3.8 40 48(+8) 56(+16) 72(+32)
libstdc++ 4.6.4 56 72(+16) 64(+8) 88(+32)
libstdc++ 4.7.0~4.7.4 64 72(+8) 64(+0) 80(+16)
libstdc++ 4.8.0~4.9.0 48 56(+8) 56(+8) 72(+24)
libstdc++ 4.9.1~6.0 56 64(+8) 64(+8) 80(+24)
boost 1.47 56 80(+24) 72(+16) 104(+48)
boost 1.48~1.51 40 72(+32) 56(+16) 96(+48)
boost 1.52~1.59 48 72(+24) 64(+16) 96(+40)
結果、こうなりました。
73
で、実際のところ
実装はどうなってんの?
基本 ハッシュや
キー比較に
8バイト
アロケータに
8バイト
全部に
8バイト
(計24バイト)
libc++ 3.0~3.8 40 48(+8) 56(+16) 72(+32)
libc++ 3.0~3.8
EBOも効いててだいたい順当。
ただし、アロケータは、バケツ配列用と
ノード用の2つ持ってる。
(両方はいらないと思うんだけど…)
74
で、実際のところ
実装はどうなってんの?
libc++ 3.0~3.8
こんな
イメージ
です
(カッコ内はバイト数)
バケツ配列へのポインタ(8)
バケツ配列用アロケータ(0, 8)
バケツ数(8)
ノード用アロケータ(0, 8)
ダミーノード(8)
ハッシュ関数オブジェクト(0, 8)
要素数(8)
キー比較関数オブジェクト(0, 8)
最大負荷率(4)
ココでEBO
ココでEBO
ココでEBO
ココでEBO
75
で、実際のところ
実装はどうなってんの?
基本 ハッシュや
キー比較に
8バイト
アロケータに
8バイト
全部に
8バイト
(計24バイト)
libstdc++ 4.9.1~6.0 56 64(+8) 64(+8) 80(+24)
libstdc++ 4.9.1~6.0
EBOは効いてるけど、基本がデカい。
1. floatの計算を極力避けるため、次にリ
ハッシュが起きる要素数を持ってる。
2. バケツ数が0になるのを避けるため、要素
数1のバケツ配列を持ってる。 76
で、実際のところ
実装はどうなってんの?
libstdc++ 4.9.1~6.0
こんな
イメージ
です
(カッコ内はバイト数)
ハッシュ関数オブジェクト(0, 8)
キー比較関数オブジェクト(0, 8)
アロケータオブジェクト(0, 8)
バケツ配列へのポインタ(8)
バケツ数(8)
ダミーノード(8)
要素数(8)
最大負荷率(4)
次にリハッシュされる要素数(8)
1要素のバケツ配列(8)
ココと
自クラスと
でEBO
77
で、実際のところ
実装はどうなってんの?
ちなみに、libstdc++ 4.8.0~4.8.5 は、
状態を持つハッシュ関数オブジェクト
使うとコンパイルエラーが出ました。
(static_assertで失敗)
普通はあんまり
そんなことしないと
思うけど…
78
で、実際のところ
実装はどうなってんの?
基本 ハッシュや
キー比較に
8バイト
アロケータに
8バイト
全部に
8バイト
(計24バイト)
boost 1.52~1.59 48 72(+24) 64(+16) 96(+40)
boost.unordered
各関数オブジェクトがデカい。
1. ハッシュとキー比較を2セットと、使ってる側フラ
グを持ってる。(強い例外保証のためらしい…)
2. アロケータも、バケツ配列用とノード用の2つ
持ってる。(両方は(ry)
3. 次にリハッシュが起きる要素数を持ってる。
79
で、実際のところ
実装はどうなってんの?
boost 1.52~1.59
こんな
イメージ
です
(カッコ内はバイト数)
どっちの関数使ってるフラグ(1)
ハッシュ関数1(0, 8)、キー比較関数1(0, 8)
ハッシュ関数2(0, 8)、キー比較関数2(0, 8)
バケツ配列用アロケータ(0, 8)
ノード用アロケータ(0, 8)
バケツ数(8)
要素数(8)
最大負荷率(4)
次にリハッシュされる要素数(8)
バケツ配列へのポインタ(8)
ココでEBO
ココでEBO
ココでEBO
それぞれは
両方0でも
0にはならない
あれ?
ダミーノード
が無い…
80
で、実際のところ
実装はどうなってんの?
boost 1.52~1.59
こんな
イメージ
です
(カッコ内はバイト数)
どっちの関数使ってるフラグ(1)
ハッシュ関数1(0, 8)、キー比較関数1(0, 8)
ハッシュ関数2(0, 8)、キー比較関数2(0, 8)
バケツ配列用アロケータ(0, 8)
ノード用アロケータ(0, 8)
バケツ数(8)
要素数(8)
最大負荷率(4)
次にリハッシュされる要素数(8)
バケツ配列へのポインタ(8)
ココでEBO
ココでEBO
ココでEBO
それぞれは
両方0でも
0にはならない
あれ?
ダミーノード
が無い…
バケツ配列の
最後の要素を
ダミーノードとして
使ってるっぽい…
81
で、実際のところ
実装はどうなってんの?
ついでに
ノードのサイズも見てみた
(アロケータで割り当てサイズを出力した)
82
で、実際のところ
実装はどうなってんの?
ノードサイズ
libc++ 3.0~3.8 24
libstdc++ 4.6.4~6.0 16
boost 1.47 16
boost 1.48~1.59 24
結果、こうなりました。
あれ?
要素(int)と
ポインタと…
あと何?
ハッシュ値
でした…
83
で、実際のところ
実装はどうなってんの?
つまり、
1. libc++ と boost 1.48以降はハッシュ値は
一度計算するとノードに保存しとく。
2. libstdc++ と boost 1.47 は毎回計算する。
と、思ったら、libstdc++ 4.8.0 以降については、
マニュアルに記載がありました!
84
で、実際のところ
実装はどうなってんの?
libstdc++ 4.8.0 以降では、以下のいずれか
が満たされれば、ハッシュ値がノードに保存
される。
1. ハッシュ関数の operator() が noexcept じゃない。
2. std::__is_fast_hash<hasher> が std::false_type を
継承している。
(デフォルトは std::true_typeを継承)
https://gcc.gnu.org/onlinedocs/gcc-4.8.0/libstdc++/manual/manual/unordered_associative.html
85
で、実際のところ
実装はどうなってんの?
ちなみに、GCC 4.6.x と 4.7.x については、
制御する方法は無いっぽい…
もしあったら教えてください。
内部実装を直接使えば制御できるっぽいけど…
86
中身はだいたい分かった。
で、使い方は?
87
中身はだいたい分かった。
で、使い方は?
連想コンテナと
だいたい同じです!
(完)
88
中身はだいたい分かった。
で、使い方は?
最大の違いはハッシュ!
(あたりまえ)
ハッシュ関数が悪いと
めっさ性能が悪くなるので、
気をつけよう!(どうやって…)
89
中身はだいたい分かった。
で、使い方は?
規格には自前のハッシュ関数
作るのを支援してくれる機構は
(まだ?)無い…
⇓
作るのムズいので、
Boost.Functional/Hash ですかね…
90
中身はだいたい分かった。
で、使い方は?
あと、連想コンテナには無い
メンバ関数もいくつかあるけど、
(バケツ系とか)、
あんまり使う気がしない…
せいぜい、rehash と reserve ですかね…
(最初の方で説明した奴)
91
中身はだいたい分かった。
で、使い方は?
連想コンテナ
• 双方向イテレータ
• 昇順にならんでる
• 変更操作でイテ
レータが無効にな
らない
非順序連想コンテナ
• 前方向イテレータ
• 順序って何?
• 変更操作でイテ
レータが無効にな
るかも(リハッシュ)
イテレータにはこんな違いが…
92
中身はだいたい分かった。
で、使い方は?
あ!
C++14 で連想コンテナに追加された、
異種混合比較※は、
非順序連想コンテナには
無いです!(残念!)
ハッシュ値が必要だから仕方ないね…
※ string がキーのコンテナを検索する時に、const char* 渡したりする奴
http://faithandbrave.hateblo.jp/entry/20131121/1385013127
93
中身はだいたい分かった。
で、使い方は?
要素追加時にも
ちょっとした違いが…
insert(const_iterator it, ...);
emplace_hint(const_iterator it, ...);
⇓
it は意味なし!
94
中身はだいたい分かった。
で、使い方は?
要素追加時にも
ちょっとした違いが…
insert(const_iterator it, ...);
emplace_hint(const_iterator it, ...);
⇓
it は意味なし!
どっちにしろ、
ハッシュ値からたどる
必要があるので…
95
中身はだいたい分かった。
で、使い方は?
最後に、
せっかく要素追加が出てきたので、
insert と emplace の使い分けを。
(連想コンテナと一緒だけど…)
96
中身はだいたい分かった。
で、使い方は?
emplace すごいよね!
コンテナ内に直接構築できるし!
じゃあ下の例だったらどれ使う?
1. c[key] = value;
2. c.insert(make_pair(key, value));
3. c.emplace(key, value);
97
中身はだいたい分かった。
で、使い方は?
1. c[key] = value;
① keyが既にコンテナにある時は、
値が value で上書かれる。
② key がまだコンテナに無い時は、
デフォルト値で新規ノード作っちゃう。
98
中身はだいたい分かった。
で、使い方は?
1. c[key] = value;
① keyが既にコンテナにある時は、
値が value で上書かれる。
② key がまだコンテナに無い時は、
デフォルト値で新規ノード作っちゃう。
新規ノード作る時に、
まずデフォルトコンストラクタで
value の型の要素を構築してから
value を代入することになる
⇓
型によっては効率悪い
そんなん百も
承知ですよね…
99
中身はだいたい分かった。
で、使い方は?
2. c.insert(make_pair(key, value));
① key が既にコンテナにある時は、
値は上書かれない。
② key がまだコンテナに無い時だけ、
ノードが新規に作られる。 何を当たり前の
ことを…
100
中身はだいたい分かった。
で、使い方は?
3. c.emplace(key, value);
① key が既にコンテナにある時は、
値は上書かれない。(insert と一緒)
② key の有無に関わらず、
ノードが新規に作られるかも…
101
中身はだいたい分かった。
で、使い方は?
3. c.emplace(key, value);
① key が既にコンテナにある時は、
値は上書かれない。(insert と一緒)
② key の有無に関わらず、
ノードが新規に作られる、かも…
えっ!?
102
中身はだいたい分かった。
で、使い方は?
unordered_map さんの心のつぶやき
あ~また新しいのが来たのか。
おんなじキーあったら追加できないんだが、
emplace の引数は得体が知れんからなぁ…
しゃ~ない、一旦ノード作ってから
比較するか…
103
中身はだいたい分かった。
で、使い方は?
新規ノードを作る
⇓
アロケータでメモリ割り当てる
しかも、重複してたら破棄する
⇓
効率悪い…
104
中身はだいたい分かった。
で、使い方は?
結論
emplace いいんだけど、
追加されるかどうかわからない時は
慎重に…
105
中身はだいたい分かった。
で、使い方は?
ちなみに、unordered_multimap とかは
必ず追加だから平気な模様。
あと、boost.unordered は、
emplace の最初の引数の型が
key の型と一致する場合には、
ノード構築前に
重複チェックしてくれる模様。
106

Weitere ähnliche Inhalte

Was ist angesagt?

組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由kikairoya
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するYoshifumi Kawai
 
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」Hiro H.
 
すごいConstたのしく使おう!
すごいConstたのしく使おう!すごいConstたのしく使おう!
すごいConstたのしく使おう!Akihiro Nishimura
 
コルーチンでC++でも楽々ゲーム作成!
コルーチンでC++でも楽々ゲーム作成!コルーチンでC++でも楽々ゲーム作成!
コルーチンでC++でも楽々ゲーム作成!amusementcreators
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるHideyuki Tanaka
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14Ryo Suzuki
 
高位合成におけるC++テンプレートメタプログラミングの効果
高位合成におけるC++テンプレートメタプログラミングの効果高位合成におけるC++テンプレートメタプログラミングの効果
高位合成におけるC++テンプレートメタプログラミングの効果Kenichiro MITSUDA
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性Hibiki Yamashiro
 
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについてカスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについてalwei
 
非同期処理の基礎
非同期処理の基礎非同期処理の基礎
非同期処理の基礎信之 岩永
 
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~Takuya Akiba
 
闇魔術を触ってみた
闇魔術を触ってみた闇魔術を触ってみた
闇魔術を触ってみたSatoshi Sato
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門Hideyuki Tanaka
 
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとはTakuya Akiba
 
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxpsMITSUNARI Shigeo
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説murachue
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!Genya Murakami
 

Was ist angesagt? (20)

組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
 
最速C# 7.x
最速C# 7.x最速C# 7.x
最速C# 7.x
 
すごいConstたのしく使おう!
すごいConstたのしく使おう!すごいConstたのしく使おう!
すごいConstたのしく使おう!
 
コルーチンでC++でも楽々ゲーム作成!
コルーチンでC++でも楽々ゲーム作成!コルーチンでC++でも楽々ゲーム作成!
コルーチンでC++でも楽々ゲーム作成!
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
 
高位合成におけるC++テンプレートメタプログラミングの効果
高位合成におけるC++テンプレートメタプログラミングの効果高位合成におけるC++テンプレートメタプログラミングの効果
高位合成におけるC++テンプレートメタプログラミングの効果
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
 
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについてカスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
 
C#で速度を極めるいろは
C#で速度を極めるいろはC#で速度を極めるいろは
C#で速度を極めるいろは
 
非同期処理の基礎
非同期処理の基礎非同期処理の基礎
非同期処理の基礎
 
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
 
闇魔術を触ってみた
闇魔術を触ってみた闇魔術を触ってみた
闇魔術を触ってみた
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは
 
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
 

Andere mochten auch

error handling using expected
error handling using expectederror handling using expected
error handling using expectedAkira Takahashi
 
女性のためのC++コミュニティ Ladies++
女性のためのC++コミュニティ Ladies++女性のためのC++コミュニティ Ladies++
女性のためのC++コミュニティ Ladies++cocodrips
 
SDL2の紹介
SDL2の紹介SDL2の紹介
SDL2の紹介nyaocat
 
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Boost.勉強会#19東京 Effective Modern C++とC++ Core GuidelinesBoost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Boost.勉強会#19東京 Effective Modern C++とC++ Core GuidelinesShintarou Okada
 
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロdigitalghost
 
左と右の話
左と右の話左と右の話
左と右の話Cryolite
 
よくわかるHopscotch hashing
よくわかるHopscotch hashingよくわかるHopscotch hashing
よくわかるHopscotch hashingKumazaki Hiroki
 
Effective Modern C++勉強会#4 Item 17, 18資料
Effective Modern C++勉強会#4 Item 17, 18資料Effective Modern C++勉強会#4 Item 17, 18資料
Effective Modern C++勉強会#4 Item 17, 18資料Ryo Igarashi
 
Gitのよく使うコマンド
Gitのよく使うコマンドGitのよく使うコマンド
Gitのよく使うコマンドYUKI Kaoru
 
バージョン管理のワークフロー
バージョン管理のワークフローバージョン管理のワークフロー
バージョン管理のワークフローadd20
 
南極マラソン報告会 半原小学校スライド
南極マラソン報告会 半原小学校スライド南極マラソン報告会 半原小学校スライド
南極マラソン報告会 半原小学校スライドAKASAKA_TAKESHI
 
Entrepreneurial lessons apr2012
Entrepreneurial lessons apr2012Entrepreneurial lessons apr2012
Entrepreneurial lessons apr2012Sam Beal
 
Google analytics常用指标及解读
Google analytics常用指标及解读Google analytics常用指标及解读
Google analytics常用指标及解读askcliff
 
3 d pie chart circular puzzle with hole in center pieces 7 stages style 4 pow...
3 d pie chart circular puzzle with hole in center pieces 7 stages style 4 pow...3 d pie chart circular puzzle with hole in center pieces 7 stages style 4 pow...
3 d pie chart circular puzzle with hole in center pieces 7 stages style 4 pow...SlideTeam.net
 

Andere mochten auch (20)

error handling using expected
error handling using expectederror handling using expected
error handling using expected
 
女性のためのC++コミュニティ Ladies++
女性のためのC++コミュニティ Ladies++女性のためのC++コミュニティ Ladies++
女性のためのC++コミュニティ Ladies++
 
SDL2の紹介
SDL2の紹介SDL2の紹介
SDL2の紹介
 
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Boost.勉強会#19東京 Effective Modern C++とC++ Core GuidelinesBoost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
 
Boost tour 1.60.0 merge
Boost tour 1.60.0 mergeBoost tour 1.60.0 merge
Boost tour 1.60.0 merge
 
Boost tour 1.60.0
Boost tour 1.60.0Boost tour 1.60.0
Boost tour 1.60.0
 
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
 
左と右の話
左と右の話左と右の話
左と右の話
 
よくわかるHopscotch hashing
よくわかるHopscotch hashingよくわかるHopscotch hashing
よくわかるHopscotch hashing
 
Boost container feature
Boost container featureBoost container feature
Boost container feature
 
emcjp Item 42
emcjp Item 42emcjp Item 42
emcjp Item 42
 
Emcjp item21
Emcjp item21Emcjp item21
Emcjp item21
 
Multi paradigm design
Multi paradigm designMulti paradigm design
Multi paradigm design
 
Effective Modern C++勉強会#4 Item 17, 18資料
Effective Modern C++勉強会#4 Item 17, 18資料Effective Modern C++勉強会#4 Item 17, 18資料
Effective Modern C++勉強会#4 Item 17, 18資料
 
Gitのよく使うコマンド
Gitのよく使うコマンドGitのよく使うコマンド
Gitのよく使うコマンド
 
バージョン管理のワークフロー
バージョン管理のワークフローバージョン管理のワークフロー
バージョン管理のワークフロー
 
南極マラソン報告会 半原小学校スライド
南極マラソン報告会 半原小学校スライド南極マラソン報告会 半原小学校スライド
南極マラソン報告会 半原小学校スライド
 
Entrepreneurial lessons apr2012
Entrepreneurial lessons apr2012Entrepreneurial lessons apr2012
Entrepreneurial lessons apr2012
 
Google analytics常用指标及解读
Google analytics常用指标及解读Google analytics常用指标及解读
Google analytics常用指标及解读
 
3 d pie chart circular puzzle with hole in center pieces 7 stages style 4 pow...
3 d pie chart circular puzzle with hole in center pieces 7 stages style 4 pow...3 d pie chart circular puzzle with hole in center pieces 7 stages style 4 pow...
3 d pie chart circular puzzle with hole in center pieces 7 stages style 4 pow...
 

Ähnlich wie クソザコ鳥頭が非順序連想コンテナに入門してみた

Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~CHY72
 
C# コンパイラーの書き換え作業の話
C# コンパイラーの書き換え作業の話C# コンパイラーの書き換え作業の話
C# コンパイラーの書き換え作業の話信之 岩永
 
最近の単体テスト
最近の単体テスト最近の単体テスト
最近の単体テストKen Morishita
 
C++でぼくが忘れがちなこと
C++でぼくが忘れがちなことC++でぼくが忘れがちなこと
C++でぼくが忘れがちなことToshihiko Ando
 
実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜
実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜
実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜Chihiro Fukazawa
 
君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らないdigitalghost
 
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49shoma h
 
C#言語機能の作り方
C#言語機能の作り方C#言語機能の作り方
C#言語機能の作り方信之 岩永
 
インターフェイス実装の活用例 AS編
インターフェイス実装の活用例 AS編インターフェイス実装の活用例 AS編
インターフェイス実装の活用例 AS編Yoshitaka Kimisaki
 
Unit Test
Unit TestUnit Test
Unit Testykhr
 
Rpn and forth 超入門
Rpn and forth 超入門Rpn and forth 超入門
Rpn and forth 超入門Yoshitaka Seo
 
Ph per のための php 最適
Ph per のための php 最適Ph per のための php 最適
Ph per のための php 最適Soudai Sone
 
デザイナーのためのPHP講座 for WordPress (初級)
デザイナーのためのPHP講座  for WordPress (初級)デザイナーのためのPHP講座  for WordPress (初級)
デザイナーのためのPHP講座 for WordPress (初級)佑 小田垣佑
 
とあるFlashの自動生成
とあるFlashの自動生成とあるFlashの自動生成
とあるFlashの自動生成Akineko Shimizu
 
再帰、漸化式、差分方程式とアルゴリズム Gx#20
再帰、漸化式、差分方程式とアルゴリズム   Gx#20再帰、漸化式、差分方程式とアルゴリズム   Gx#20
再帰、漸化式、差分方程式とアルゴリズム Gx#20鉄次 尾形
 
わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」
わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」
わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」Takeshi Kiriya
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Rubymitim
 

Ähnlich wie クソザコ鳥頭が非順序連想コンテナに入門してみた (20)

Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~
 
C# コンパイラーの書き換え作業の話
C# コンパイラーの書き換え作業の話C# コンパイラーの書き換え作業の話
C# コンパイラーの書き換え作業の話
 
最近の単体テスト
最近の単体テスト最近の単体テスト
最近の単体テスト
 
Yarudake
YarudakeYarudake
Yarudake
 
C++でぼくが忘れがちなこと
C++でぼくが忘れがちなことC++でぼくが忘れがちなこと
C++でぼくが忘れがちなこと
 
実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜
実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜
実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜
 
資料
資料資料
資料
 
君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない
 
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
 
C#言語機能の作り方
C#言語機能の作り方C#言語機能の作り方
C#言語機能の作り方
 
インターフェイス実装の活用例 AS編
インターフェイス実装の活用例 AS編インターフェイス実装の活用例 AS編
インターフェイス実装の活用例 AS編
 
Unit Test
Unit TestUnit Test
Unit Test
 
Rpn and forth 超入門
Rpn and forth 超入門Rpn and forth 超入門
Rpn and forth 超入門
 
Ph per のための php 最適
Ph per のための php 最適Ph per のための php 最適
Ph per のための php 最適
 
デザイナーのためのPHP講座 for WordPress (初級)
デザイナーのためのPHP講座  for WordPress (初級)デザイナーのためのPHP講座  for WordPress (初級)
デザイナーのためのPHP講座 for WordPress (初級)
 
とあるFlashの自動生成
とあるFlashの自動生成とあるFlashの自動生成
とあるFlashの自動生成
 
Webページで学ぶJavaScript2013 第1回
Webページで学ぶJavaScript2013 第1回Webページで学ぶJavaScript2013 第1回
Webページで学ぶJavaScript2013 第1回
 
再帰、漸化式、差分方程式とアルゴリズム Gx#20
再帰、漸化式、差分方程式とアルゴリズム   Gx#20再帰、漸化式、差分方程式とアルゴリズム   Gx#20
再帰、漸化式、差分方程式とアルゴリズム Gx#20
 
わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」
わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」
わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Ruby
 

Kürzlich hochgeladen

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 

Kürzlich hochgeladen (7)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

クソザコ鳥頭が非順序連想コンテナに入門してみた

Hinweis der Redaktion

  1. 自主クソザコ枠
  2. 某主催者に誘われたから
  3. メンバ関数 バケツ数:bucket_count() 要素数:size()
  4. 最大消費量
  5. 最大消費量
  6. 最大消費量
  7. 最新版を基準に時折過去のバージョンも…
  8. 実際、1件ずつ insert して言った後、イテレータで全要素を出力すると、追加した逆順で出力される
  9. libstdc++ のコメントに、vector と forward_list をくっつけた物って書いてあった…
  10. 規格によれば、要素数は計算量が定数時間じゃなきゃダメ
  11. 違うのもいるけど…
  12. 各実装の最新版について、ちょっと説明
  13. libstdc++ と同じ理由だと思うが、次にリハッシュが起きる要素数を持ってる。
  14. int は 4 バイトだけど、ポインタが 8 バイトなので、アラインメントの関係で16バイトになる。
  15. 内部実装の__unordered_set とかを使えば可能っぽい… 試してない…
  16. これだけじゃあんまりなので…
  17. よく見る(?)、各メンバに std::hash を適用した結果を xor するのはダメらしい…
  18. バケツ系とか、使い道がわからない… 逆に連想コンテナにはある、一部のメンバ関数は無い lower_bound、upper_bound とか…
  19. 男は後ろを振り向かない
  20. アキラさんのブログに記事があるよ!
  21. EMC++ にも、ちまつと触れられてる…