SlideShare a Scribd company logo
1 of 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

More Related Content

What's hot

多チャンネルバイラテラルフィルタの高速化
多チャンネルバイラテラルフィルタの高速化多チャンネルバイラテラルフィルタの高速化
多チャンネルバイラテラルフィルタの高速化Norishige Fukushima
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8y_taka_23
 
C++の話(本当にあった怖い話)
C++の話(本当にあった怖い話)C++の話(本当にあった怖い話)
C++の話(本当にあった怖い話)Yuki Tamura
 
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだGenya Murakami
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるHideyuki Tanaka
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ信之 岩永
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexprGenya Murakami
 
クロージャデザインパターン
クロージャデザインパターンクロージャデザインパターン
クロージャデザインパターンMoriharu Ohzu
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!Genya Murakami
 
圏論は、随伴が全て
圏論は、随伴が全て圏論は、随伴が全て
圏論は、随伴が全てohmori
 
良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方Shigenori Sagawa
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 
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.
 
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会Akihiko Matuura
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 TipsTakaaki Suzuki
 
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜UnityTechnologiesJapan002
 
C++20 モジュールの概要 / Introduction to C++ modules (part 1)
C++20 モジュールの概要 / Introduction to C++ modules (part 1)C++20 モジュールの概要 / Introduction to C++ modules (part 1)
C++20 モジュールの概要 / Introduction to C++ modules (part 1)TetsuroMatsumura
 
闇魔術を触ってみた
闇魔術を触ってみた闇魔術を触ってみた
闇魔術を触ってみたSatoshi Sato
 
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しようUnity Technologies Japan K.K.
 

What's hot (20)

多チャンネルバイラテラルフィルタの高速化
多チャンネルバイラテラルフィルタの高速化多チャンネルバイラテラルフィルタの高速化
多チャンネルバイラテラルフィルタの高速化
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
 
C++の話(本当にあった怖い話)
C++の話(本当にあった怖い話)C++の話(本当にあった怖い話)
C++の話(本当にあった怖い話)
 
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
 
クロージャデザインパターン
クロージャデザインパターンクロージャデザインパターン
クロージャデザインパターン
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
 
圏論は、随伴が全て
圏論は、随伴が全て圏論は、随伴が全て
圏論は、随伴が全て
 
良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
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++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会
 
C++の黒魔術
C++の黒魔術C++の黒魔術
C++の黒魔術
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
 
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
 
C++20 モジュールの概要 / Introduction to C++ modules (part 1)
C++20 モジュールの概要 / Introduction to C++ modules (part 1)C++20 モジュールの概要 / Introduction to C++ modules (part 1)
C++20 モジュールの概要 / Introduction to C++ modules (part 1)
 
闇魔術を触ってみた
闇魔術を触ってみた闇魔術を触ってみた
闇魔術を触ってみた
 
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
 

Viewers also liked

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
 
左と右の話
左と右の話左と右の話
左と右の話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
 
Technology inventory
Technology inventoryTechnology inventory
Technology inventoryPinhsuan
 

Viewers also liked (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
 
左と右の話
左と右の話左と右の話
左と右の話
 
よくわかる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...
 
Technology inventory
Technology inventoryTechnology inventory
Technology inventory
 

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

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
 

Similar to クソザコ鳥頭が非順序連想コンテナに入門してみた (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
 

Recently uploaded

デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 

Recently uploaded (9)

デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 

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

Editor's Notes

  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++ にも、ちまつと触れられてる…