Upload
Download free for 30 days
Login
Submit search
Boost.PropertyMap (.pdf)
4 likes
2,325 views
C
Cryolite
2010/10/23 Boost.勉強会 #3 関西 プレゼン資料 .pdf とりあえず upload 版
Technology
Read more
1 of 88
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
More Related Content
PDF
部内勉強会 数え上げの基礎
Kazuma Mikami
PDF
自然言語処理のための機械学習入門1章
Hiroki Mizukami
PDF
代数的実数とCADの実装紹介
Masahiro Sakai
PDF
Eigentrust (in Japanese)
snarazaki
PDF
プログラマのための文書推薦入門
y-uti
PDF
Monadicプログラミング マニアックス
Tomoharu ASAMI
PDF
動的計画法の並列化
Proktmr
PDF
ARC#003D
nullmineral
部内勉強会 数え上げの基礎
Kazuma Mikami
自然言語処理のための機械学習入門1章
Hiroki Mizukami
代数的実数とCADの実装紹介
Masahiro Sakai
Eigentrust (in Japanese)
snarazaki
プログラマのための文書推薦入門
y-uti
Monadicプログラミング マニアックス
Tomoharu ASAMI
動的計画法の並列化
Proktmr
ARC#003D
nullmineral
What's hot
(15)
PDF
各言語の k-means 比較
y-uti
PDF
プログラミングコンテストでの乱択アルゴリズム
Takuya Akiba
PDF
色々なダイクストラ高速化
yosupo
PDF
C++0x 言語の未来を語る
Akira Takahashi
PDF
プログラミングコンテストでのデータ構造 2 ~動的木編~
Takuya Akiba
PDF
協調フィルタリングを利用した推薦システム構築
Masayuki Ota
PDF
スタートHaskell2 型を信じろ
Satoshi KOJIMA
PPTX
函数プログラミングのエッセンスと考え方
啓 小笠原
PDF
コンピュータービジョン最先端ガイド2 3.4ベクトルデータに対するカーネル法(SVM)
Takahiro (Poly) Horikawa
PDF
Clustering _ishii_2014__ch10
Kota Mori
PDF
Deep learning _linear_algebra___probablity___information
takutori
PDF
プログラミングコンテストでの動的計画法
Takuya Akiba
PDF
Cvpr2011 reading-tsubosaka
正志 坪坂
PDF
動的計画法入門(An introduction to Dynamic Programming)
kakira9618
PDF
"Puzzle-Based Automatic Testing: Bringing Humans into the Loop by Solving Puz...
nkazuki
各言語の k-means 比較
y-uti
プログラミングコンテストでの乱択アルゴリズム
Takuya Akiba
色々なダイクストラ高速化
yosupo
C++0x 言語の未来を語る
Akira Takahashi
プログラミングコンテストでのデータ構造 2 ~動的木編~
Takuya Akiba
協調フィルタリングを利用した推薦システム構築
Masayuki Ota
スタートHaskell2 型を信じろ
Satoshi KOJIMA
函数プログラミングのエッセンスと考え方
啓 小笠原
コンピュータービジョン最先端ガイド2 3.4ベクトルデータに対するカーネル法(SVM)
Takahiro (Poly) Horikawa
Clustering _ishii_2014__ch10
Kota Mori
Deep learning _linear_algebra___probablity___information
takutori
プログラミングコンテストでの動的計画法
Takuya Akiba
Cvpr2011 reading-tsubosaka
正志 坪坂
動的計画法入門(An introduction to Dynamic Programming)
kakira9618
"Puzzle-Based Automatic Testing: Bringing Humans into the Loop by Solving Puz...
nkazuki
Ad
Viewers also liked
(20)
PDF
10分で分かるリアクティブシステム
TIS Inc.
PDF
Deeplinkから考えるWebとAppの今後とは
Yohhei Someya
PDF
How To Become A Rubyist
masayoshi takahashi
PDF
Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
Jumpei Miyata
PPTX
flow による型のある世界入門
sairoutine
PDF
地獄のご紹介 #dentoolt
whywaita
PDF
Iterators must-go(ja)
Akira Takahashi
PDF
ABC2015 Summer LT
Kensuke Onishi
PDF
CG基礎3 メタリンク
Tetsuro Nakamura
PDF
Boost study meeting opening 4
Akira Takahashi
PDF
boost::shared_ptr tutorial
NU_Pan
PPTX
boost - std - C#
Tatsuya Ishikawa
PDF
The Earth is not flat; but it's not round either (Geography on Boost.Geometry)
Vissarion Fisikopoulos
DOCX
Boost勉強会 #10 ディスカッションまとめ
Sigureya
PDF
Glfw3,OpenGL,GUI
hira_kuni_45
PDF
boost and c++11
Akihiko Matuura
PDF
3DCAD@VDI活用とCADデータ管理のロードマップ
Dell TechCenter Japan
PPTX
ゲーム開発経営ゲーム
Yuki Miyatake
PDF
Boost container feature
Akira Takahashi
PDF
Boost Tour 1_58_0 merge
Akira Takahashi
10分で分かるリアクティブシステム
TIS Inc.
Deeplinkから考えるWebとAppの今後とは
Yohhei Someya
How To Become A Rubyist
masayoshi takahashi
Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
Jumpei Miyata
flow による型のある世界入門
sairoutine
地獄のご紹介 #dentoolt
whywaita
Iterators must-go(ja)
Akira Takahashi
ABC2015 Summer LT
Kensuke Onishi
CG基礎3 メタリンク
Tetsuro Nakamura
Boost study meeting opening 4
Akira Takahashi
boost::shared_ptr tutorial
NU_Pan
boost - std - C#
Tatsuya Ishikawa
The Earth is not flat; but it's not round either (Geography on Boost.Geometry)
Vissarion Fisikopoulos
Boost勉強会 #10 ディスカッションまとめ
Sigureya
Glfw3,OpenGL,GUI
hira_kuni_45
boost and c++11
Akihiko Matuura
3DCAD@VDI活用とCADデータ管理のロードマップ
Dell TechCenter Japan
ゲーム開発経営ゲーム
Yuki Miyatake
Boost container feature
Akira Takahashi
Boost Tour 1_58_0 merge
Akira Takahashi
Ad
Similar to Boost.PropertyMap (.pdf)
(20)
PPT
Algorithm 速いアルゴリズムを書くための基礎
Kenji Otsuka
PPTX
Tokyo r27
Takashi Minoda
PDF
第1回R勉強会@東京
Yohei Sato
PPT
6 Info Theory
melvincabatuan
PDF
実用Brainf*ckプログラミング
京大 マイコンクラブ
PPTX
Euler 標数は測度ですか??
Tatsuki SHIMIZU
PDF
Q13
Masato Hommaru
PDF
すごいHaskell読書会 第7章 (前編)
Suguru Hamazaki
PDF
ウェーブレット木の世界
Preferred Networks
PDF
Material
_TUNE_
PPTX
Coursera "Neural Networks"
hayashizaki takaaki
PDF
SSII2022 [TS3] コンテンツ制作を支援する機械学習技術〜 イラストレーションやデザインの基礎から最新鋭の技術まで 〜
SSII
PDF
programming camp 2008, introduction of programming, algorithm
Hiro Yoshioka
PPTX
今日からはじめる微分方程式
Ryo Kaji
PDF
研究生のためのC++ no.3
Tomohiro Namba
PDF
[FE]配列へのデータ格納について.pdf
c w
PDF
闇魔術を触ってみた
Satoshi Sato
PDF
「現実世界に活かす数学」 (麻布高等学校、教養総合、数学講義 5 回目)
Kensuke Otsuki
PPTX
データとは何か
Kenta Suzuki
PDF
PythonによるDeep Learningの実装
Shinya Akiba
Algorithm 速いアルゴリズムを書くための基礎
Kenji Otsuka
Tokyo r27
Takashi Minoda
第1回R勉強会@東京
Yohei Sato
6 Info Theory
melvincabatuan
実用Brainf*ckプログラミング
京大 マイコンクラブ
Euler 標数は測度ですか??
Tatsuki SHIMIZU
Q13
Masato Hommaru
すごいHaskell読書会 第7章 (前編)
Suguru Hamazaki
ウェーブレット木の世界
Preferred Networks
Material
_TUNE_
Coursera "Neural Networks"
hayashizaki takaaki
SSII2022 [TS3] コンテンツ制作を支援する機械学習技術〜 イラストレーションやデザインの基礎から最新鋭の技術まで 〜
SSII
programming camp 2008, introduction of programming, algorithm
Hiro Yoshioka
今日からはじめる微分方程式
Ryo Kaji
研究生のためのC++ no.3
Tomohiro Namba
[FE]配列へのデータ格納について.pdf
c w
闇魔術を触ってみた
Satoshi Sato
「現実世界に活かす数学」 (麻布高等学校、教養総合、数学講義 5 回目)
Kensuke Otsuki
データとは何か
Kenta Suzuki
PythonによるDeep Learningの実装
Shinya Akiba
More from Cryolite
(10)
PDF
A Fast and Space-Efficient Algorithm for Calculating Deficient Numbers (a.k.a...
Cryolite
PPTX
A Fast and Space-Efficient Algorithm for Calculating Deficient Numbers (a.k.a...
Cryolite
PPTX
左と右の話
Cryolite
PPTX
Lambda in template_final
Cryolite
PDF
Allocators@C++11
Cryolite
PDF
家に帰るまでが遠足です
Cryolite
PDF
Destructive Call
Cryolite
PPTX
Boost.PropertyMap (.pptx)
Cryolite
PPT
shared_ptr & weak_ptr (ppt 第2版, DL 専用)
Cryolite
PPT
shared_ptr & weak_ptr (ppt 初版, DL 専用)
Cryolite
A Fast and Space-Efficient Algorithm for Calculating Deficient Numbers (a.k.a...
Cryolite
A Fast and Space-Efficient Algorithm for Calculating Deficient Numbers (a.k.a...
Cryolite
左と右の話
Cryolite
Lambda in template_final
Cryolite
Allocators@C++11
Cryolite
家に帰るまでが遠足です
Cryolite
Destructive Call
Cryolite
Boost.PropertyMap (.pptx)
Cryolite
shared_ptr & weak_ptr (ppt 第2版, DL 専用)
Cryolite
shared_ptr & weak_ptr (ppt 初版, DL 専用)
Cryolite
Recently uploaded
(10)
PDF
R-SCoRe: Revisiting Scene Coordinate Regression for Robust Large-Scale Visual...
Takuya Minagawa
PDF
Geminiの出力崩壊 本レポートは、Googleの大規模言語モデル「Gemini 2.5」が、特定の画像と短文入力に対して、誤った地名を推定し、最終的に...
池田 直哉
PDF
Yamaha DT200WR Real Enduro ENGINE CYLINDER TRANSMISSION
Kannabi1
PDF
[email protected]
Matsushita Laboratory
PDF
ココロ分解帳|感情をやさしく分解し自分と他者を理解するためのモバイルノートアプリ
hatedwunao
PDF
20250826_Devinで切り拓く沖縄ITの未来_AI駆動開発勉強会 沖縄支部 第2回
Masaki Yamakawa
PPTX
Vibe Codingを触って感じた現実について.pptx .
iPride Co., Ltd.
PPTX
生成AIとモデルベース開発:実はとても相性が良いことを説明します。まあそうだろうなと思われる方はご覧ください。
Akira Tanaka
PDF
20250823_IoTLT_vol126_kitazaki_v1___.pdf
Ayachika Kitazaki
PPTX
Cosense - 整えずして完全勝利!Cosenseが他のwikiツールと違う理由
Ko Jikawa
R-SCoRe: Revisiting Scene Coordinate Regression for Robust Large-Scale Visual...
Takuya Minagawa
Geminiの出力崩壊 本レポートは、Googleの大規模言語モデル「Gemini 2.5」が、特定の画像と短文入力に対して、誤った地名を推定し、最終的に...
池田 直哉
Yamaha DT200WR Real Enduro ENGINE CYLINDER TRANSMISSION
Kannabi1
[email protected]
Matsushita Laboratory
ココロ分解帳|感情をやさしく分解し自分と他者を理解するためのモバイルノートアプリ
hatedwunao
20250826_Devinで切り拓く沖縄ITの未来_AI駆動開発勉強会 沖縄支部 第2回
Masaki Yamakawa
Vibe Codingを触って感じた現実について.pptx .
iPride Co., Ltd.
生成AIとモデルベース開発:実はとても相性が良いことを説明します。まあそうだろうなと思われる方はご覧ください。
Akira Tanaka
20250823_IoTLT_vol126_kitazaki_v1___.pdf
Ayachika Kitazaki
Cosense - 整えずして完全勝利!Cosenseが他のwikiツールと違う理由
Ko Jikawa
Boost.PropertyMap (.pdf)
1.
1 2010/10/23 Cryolite Boost.勉強会 #3
関西 S t a T L a a a e m n d dr rri b p l t e y
2.
自己紹介 • 名前: Cryolite •
特技: C++ とかできます 2
3.
STLとは「コンテナ× イテレータ×アルゴリズム」 3 コンテナ アルゴリズム find sort remove ・・・・・ vector deque list ・・・・・
4.
STLとは「コンテナ× イテレータ×アルゴリズム」 4 コンテナ アルゴリズム find sort remove ・・・・・ vector deque list ・・・・・
5.
STLとは「コンテナ× イテレータ×アルゴリズム」 5 コンテナ アルゴリズム find sort remove ・・・・・ vector deque list ・・・・・ (組み合わせの数) =(データ構造の数)×(アルゴリズムの数) かける
6.
STLとは「コンテナ× イテレータ×アルゴリズム」 コンテナ アルゴリズム find sort remove ・・・・・ vector deque list ・・・・・ イテレータ 6
7.
STLとは「コンテナ× イテレータ×アルゴリズム」 コンテナ アルゴリズム find sort remove ・・・・・ vector deque list ・・・・・ イテレータ (組み合わせの数) =(データ構造の数)+(アルゴリズムの数) たす 7
8.
STLとは「コンテナ× イテレータ×アルゴリズム」 コンテナ アルゴリズム findvector deque イテレータ 8
9.
STLとは「コンテナ× イテレータ×アルゴリズム」 コンテナ アルゴリズム findvector deque イテレータ コンテナ側に 変化があっても…… 9
10.
STLとは「コンテナ× イテレータ×アルゴリズム」 コンテナ アルゴリズム findvector deque イテレータ コンテナ側に 変化があっても…… アルゴリズム側に 影響しない 10
11.
STLとは「コンテナ× イテレータ×アルゴリズム」 コンテナ アルゴリズム findvector deque イテレータ コンテナ側に 変化があっても…… アルゴリズム側に 影響しない コンテナ側の変化に 対するファイアウォール
11
12.
イテレータに注目! コンテナ アルゴリズム find sort remove ・・・・・ vector deque list ・・・・・ イテレータ ちうもく!! 12
13.
コンテナのイテレータには 3つの機能がある! 13
14.
コンテナのイテレータは • コンテナ中の場所(コンテナ中の1要素)を 指し示す 14 // 同じ場所なら
true だよ! iter == jter;
15.
コンテナのイテレータは • コンテナ中の場所(コンテナ中の1要素)を 指し示す • コンテナ中の 全要素を列挙する 15 //
同じ場所なら true だよ! iter == jter; // 次の場所に移動するよ! // 繰り返せば列挙になるよ! ++iter;
16.
コンテナのイテレータは • コンテナ中の場所(コンテナ中の1要素)を 指し示す • コンテナ中の 全要素を列挙する •
指し示している場所の値を取り出せる 16 // 同じ場所なら true だよ! iter == jter; // 次の場所に移動するよ! // 繰り返せば列挙になるよ! ++iter; // あたいったら取り出すね! *iter;
17.
イテレータの3つの機能 (※イメージです) 17 2 3 5
7 11 13 17 ・・・ コンテナ
18.
イテレータの3つの機能 (※イメージです) 18 2 3 5
7 11 13 17 ・・・ 場所を指示 コンテナ
19.
イテレータの3つの機能 (※イメージです) 19 2 3 5
7 11 13 17 ・・・ 列挙する場所を指示 コンテナ
20.
イテレータの3つの機能 (※イメージです) 20 2 3 5
7 11 13 17 ・・・ 5 値を取り出す 列挙する場所を指示 コンテナ
21.
STL 最大の欠点 – Cryolite
の眼: C++pro 21 Inspired by http://itpro.nikkeibp.co.jp/article/Watcher/20101015/352993/
22.
STL 最大の欠点 – Cryolite
の眼: C++pro 配列†のインデックスを 再評価してもいいのでは? 22 Inspired by http://itpro.nikkeibp.co.jp/article/Watcher/20101015/352993/
23.
STL 最大の欠点 – Cryolite
の眼: C++pro 23 配列†のインデックスを 再評価してもいいのでは? 筆者がここで言いたいのは, そろそろ配列†のインデック スを使ってみてもいいので は?ということだ. †一般にはランダムアクセスコンテナ Inspired by http://itpro.nikkeibp.co.jp/article/Watcher/20101015/352993/
24.
24 温故知新 – 故きを温ね新しきを知る
25.
25 古代暗黒魔法が封印された禁書を開 いてみると,そこには古代語で書か れたプログラムとおぼしきものが! 温故知新 – 故きを温ね新しきを知る
26.
26 古代暗黒魔法が封印された禁書を開 いてみると,そこには古代語で書か れたプログラムとおぼしきものが! vector<int> v; ..... for (size_t
i = 0; i != v.size(); ++i) { cout << v[i] << endl; } 温故知新 – 故きを温ね新しきを知る
27.
27 古代暗黒魔法が封印された禁書を開 いてみると,そこには古代語で書か れたプログラムとおぼしきものが! vector<int> v; ..... for (size_t
i = 0; i != v.size(); ++i) { cout << v[i] << endl; } 温故知新 – 故きを温ね新しきを知る ランダムアクセスコンテナならイ テレータを使わなくてもインデック スで要素を列挙できるもんっ!
28.
• コンテナ中の場所を指し示す • コンテナ中の 全要素を列挙する •
指し示している場所の値を取り出せる 28 // 同じ場所なら true だよ! iter == jter; // 次の場所に移動するよ! // 繰り返せば列挙になるよ! ++iter; // あたいったら取り出すね! *iter; イテレータの機能を 思い出してみよう!
29.
29 ランダムアクセスコンテナの インデックスは……
30.
• コンテナ中の場所を指し示す 30 // 同じ場所なら
true だよ! i == j; ランダムアクセスコンテナの インデックスは……
31.
• コンテナ中の場所を指し示す • コンテナ中の 全要素を列挙する 31 //
同じ場所なら true だよ! i == j; // 次の場所に移動するよ! // 繰り返せば列挙になるよ! ++i; ランダムアクセスコンテナの インデックスは……
32.
• コンテナ中の場所を指し示す • コンテナ中の 全要素を列挙する •
指し示している場所の値を取り出せ……る? 32 // 同じ場所なら true だよ! i == j; // 次の場所に移動するよ! // 繰り返せば列挙になるよ! ++i; // コ,コンテナオブジェクトさえあれば! v[i]; ランダムアクセスコンテナの インデックスは……
33.
値の取り出し方を 抽象化しましょう ← 結論 33
34.
値の取り出し方を 抽象化しましょう ← 結論 34 イテレータもインデックスも コンテナ中の場所を指し示せる
35.
値の取り出し方を 抽象化しましょう ← 結論 35 v[i]; イテレータもインデックスも コンテナ中の場所を指し示せる *iter; 値を取り出す構文が違う
36.
値の取り出し方を 抽象化しましょう ← 結論 36 v[i]; イテレータもインデックスも コンテナ中の場所を指し示せる *iter; 値の取り出し方を抽象化しましょう 値を取り出す構文が違う get(pm,
desc);
37.
値の取り出し方を 抽象化しましょう ← 結論 37 v[i]; イテレータもインデックスも コンテナ中の場所を指し示せる *iter; 値の取り出し方を抽象化しましょう 値を取り出す構文が違う get(pm,
desc); イテレータだったりインデックスだったり
38.
【再掲】 イテレータの機能(イメージ) 38 2 3 5
7 11 13 17 ・・・ 5 値を取り出す 列挙する場所を指示 コンテナ
39.
値の取り出し方を 抽象化したイメージへ…… ・・・ モノの集まり 39
40.
・・・ 1つのモノを指示 モノの集まり 40 値の取り出し方を 抽象化したイメージへ……
41.
・・・ 列挙する1つのモノを指示 モノの集まり 41 値の取り出し方を 抽象化したイメージへ……
42.
・・・ 5 列挙する1つのモノを指示 モノの集まり 32 7 モノと値を関連付ける 11 13
19 42 値の取り出し方を 抽象化したイメージへ……
43.
疑問 ・・・ 5 列挙する1つのモノを指示 モノの集まり 32 7 モノと値を関連付ける 11 13
19 こんな風に考えて 何がうれしいの? 43
44.
疑問への回答その1 ・・・ 5 列挙する1つのモノを指示 モノの集まり 32 7 モノと値を関連付ける 11 13
19 こんな風に考えて 何がうれしいの? 44 モノの指し示し方を 柔軟にできるよ! イテレータ,インデックス, etc…
45.
・・・ 5 列挙する1つのモノを指示 モノの集まり 32 7 モノと値を関連付ける 11 13
19 こんな風に考えて 何がうれしいの? 45 モノに対して柔軟に 値を関連付けられるよ! 疑問への回答その2
46.
・・・ 1 モノの集まり 11 1 定数を関連付ける 1 1
1 46 疑問への回答その2 (例1)
47.
・・・ モノの集まり 3×22×2 7×2 11×2
13×2 19×2 47 5×2 値を加工して関連付ける 疑問への回答その2 (例2)
48.
・・・ 5 列挙する1つのモノを指示 モノの集まり 32 7 モノと値を関連付ける 11 13
19 こんな風に考えて 何がうれしいの? 1つのモノに対して複数の 値を関連付けられるよ! 48 疑問への回答その3
49.
・・・ 49 疑問への回答その3 (例)
50.
・・・ 532 7 11
13 19 モノと値を関連付けその1 50 疑問への回答その3 (例)
51.
・・・ 532 7 11
13 19 ‘H’ ‘e’ ‘l’ ‘l’ ‘o’ ‘,’ ‘_’ モノと値を関連付けその1 モノと値を関連付けその2 51 疑問への回答その3 (例)
52.
それぞれの機能を担う オブジェクトに名前を付けよう! ・・・ 5 列挙する1つのモノを指示 モノの集まり 32 7 モノと値を関連付ける 11 13
19 52
53.
・・・ 5 列挙する モノの集まり 32 7 モノと値を関連付ける 11 13
19 53 デスクリプタ それぞれの機能を担う オブジェクトに名前を付けよう!
54.
・・・ 5 モノの集まり 32 7 モノと値を関連付ける 11 13
19 54 デスクリプタ (デスクリプタを列挙する) イテレータ それぞれの機能を担う オブジェクトに名前を付けよう!
55.
・・・ 5 モノの集まり 32 7 プロパティマップ 11 13
19 55 デスクリプタ (デスクリプタを列挙する) イテレータ それぞれの機能を担う オブジェクトに名前を付けよう!
56.
56 Boost.PropertyMap 2010/10/23 Cryolite Boost.勉強会 #3
関西
57.
プロパティマップとは 57 デスクリプタを受け取って,値を返す インタフェイスを定義 デスクリプタと書き込む値を受け取って, 書き込むインタフェイスを定義 get(pm, desc); //
値が返る put(pm, desc, val);
58.
プロパティマップとは • イテレータにおける「値を取り出す」「値を 書き込む」機能に対応 • うれしいこと3つ –
モノの指し示し方が超柔軟に – モノに関連付けられた値の取り出し方・書き込 み方が超柔軟に – 1つのモノに対して複数の値・書き込み先を関 連付ける 58
59.
プロパティマップとは 59 このライブラリだけ 説明しても意味不明! STL のコンテナとアルゴリズムの 関係を話さずにイテレータを説明 してもおそらく意味不明! ≒
60.
イテレータ in STL 60 コンテナ
アルゴリズム find sort remove ・・・・・ vector deque list ・・・・・ イテレータ
61.
プロパティマップ in 汎用グラフライブラリ 61 グラフ データ構造 汎用グラフ アルゴリズム Dijkstra DFS A* ・・・・・ 隣接リスト 隣接行列 edge list ・・・・・ イテレータ デスクリプタ プロパティ マップ ビジター
62.
プロパティマップ in 汎用グラフライブラリ 62 グラフ データ構造 汎用グラフ アルゴリズム Dijkstra DFS A* ・・・・・ 隣接リスト 隣接行列 edge list ・・・・・ イテレータ デスクリプタ プロパティ マップ ビジター
63.
Boost.PropertyMap の本領 – グラフにおける汎用アルゴリズム 63 a b c d e f
64.
グラフのデータ構造とプロパティマップ - グラフのデータ構造は多種多様 64 a b c d e f a b
d g b c d a c f a c g b f c d e 隣接リスト (例1)
65.
グラフのデータ構造とプロパティマップ - グラフのデータ構造は多種多様 65 a b c d e f a b
d g b c d a c f a c g b f c d e 隣接リスト (例2)
66.
グラフのデータ構造とプロパティマップ - グラフのデータ構造は多種多様 66 隣接行列 0 1
1 1 0 0 1 0 1 0 1 0 1 1 0 1 0 1 1 0 1 0 0 1 0 1 0 0 0 1 0 0 1 1 1 0 a b c d e f a b c d e f
67.
グラフアルゴリズムは頂点や 辺に関連付けられた値を駆使 67 グラフアルゴリズムは • 頂点の重み,インデックス,親,色 • スタートから各頂点までの距離 •
辺の重み,インデックス • 辺のインデックス などを使わないと実行できない 色々なグラフデータ構造に対して これらをどう関連付けるのか?
68.
デスクリプタ・イテレータ・プロパティマッ プによる汎用なグラフアルゴリズム 68 ⇒(デスクリプタを返す) イテレータを使います 頂点や辺を一意に特定する必要があります 頂点や辺に様々な値を関連付ける必要があります 頂点や辺を様々な形で列挙する必要があります ⇒頂点や辺を指すデスクリプタを使います ⇒プロパティマップを使います
69.
具体的な例 – ランダムアク セスコンテナ
& イテレータ 69 vector<Edge> struct Edge { double getWeight() const; void setWeight(double w); }; double get(WeightPMap, Iterator iter) { return iter->getWeight(); } 辺の重みの 読み出し iter
70.
具体的な例 – ランダムアク セスコンテナ
& イテレータ 70 vector<Edge> struct Edge { double getWeight() const; void setWeight(double w); }; void put(WeightPMap, Iterator iter, double val) { iter->setWeight(val); } 辺の重みの 書き込み iter
71.
具体的な例 – ランダムアク セスコンテナ
& イテレータ 71 vector<Edge> struct IteratorIndexPMap { Iterator first_; // = v.begin() }; size_t get(IteratorOffsetPMap pm, Iterator iter) { return iter - pm.first_; } 辺のインデックスの 読み出し (read-only) iter
72.
具体的な例 – ランダムアク セスコンテナ
& インデックス 72 vector<Edge> struct Edge { double getWeight() const; void setWeight(double w); }; struct WeightPMap { vector<Edge> &v_; }; double get(WeightPMap pm, Index idx) { return pm.v_[idx].getWeight(); } 辺の重みの 読み出し idx
73.
具体的な例 – ランダムアク セスコンテナ
& インデックス 73 vector<Edge> struct Edge { double getWeight() const; void setWeight(double w); }; struct WeightPMap { vector<Edge> &v_; }; void put(WeightPMap pm, Index idx, double val) { pm.v_[idx].setWeight(val); } 辺の重みの 書き込み idx
74.
具体的な例 – ランダムアク セスコンテナ
& インデックス 74 vector<Edge> struct IdentityPMap {}; size_t get(IdentityPMap, Index idx) { return idx; } 辺のインデックスの 読み出し (read-only) idx
75.
様々なプロパティマップの例 75 vector<Edge> 0 1 2
3 4 インデックス
76.
76 vector<Edge> 0 1 2
3 4 インデックス another_vec[idx] 2 3 5 7 11 様々なプロパティマップの例
77.
vector<Edge> 77 0 1 2
3 4 インデックス another_vec[idx] 2 3 5 7 11 様々なプロパティマップの例インデックスを踏み台にして, 他のランダムアクセスコンテナで 別の値をさらに関連付ける Edge クラスが元々持っていない 種類の値を非侵入的に関連付け
78.
78 list<Edge> double get(WeightPMap, Iterator
iter) { return iter->getWeight(); } void put(WeightPMap, Iterator iter, double val) { iter->setWeight(val); } iter 様々なプロパティマップの例
79.
79 list<Edge> unordered_map<Iterator, double> 2 3
5 7 11 iter 様々なプロパティマップの例
80.
80 list<Edge> unordered_map<Iterator, size_t> 0 1
2 3 4 iter インデックス 様々なプロパティマップの例
81.
81 list<Edge> unordered_map<Iterator, size_t> 0 1
2 3 4 iter インデックス 2 3 5 7 11 another_vec[idx] 様々なプロパティマップの例
82.
様々なプロパティマップの例 list<Edge> 82 unordered_map<Iterator, size_t> 0 1
2 3 4 iter インデックス 2 3 5 7 11 another_vec[idx] 実メモリ上に記録した インデックスを踏み台にして, 他のランダムアクセスコンテナで 別の値をさらに関連付ける Edge クラスが元々持っていない 種類の値を非侵入的に関連付け
83.
プロパティマップ in 汎用グラフライブラリ 83 グラフデータ構造 汎用グラフアルゴリズム プロパティマップ get(pm, desc),
put(pm, desc, val)
84.
プロパティマップ in 汎用グラフライブラリ 84 グラフデータ構造 汎用グラフアルゴリズム プロパティマップ get(pm, desc),
put(pm, desc, val) アルゴリズムは プロパティマップのみに依存 どんなデータ構造に対しても 汎用で再利用可能
85.
85 ダイクストラ法で必要なプロパティ 種類 Read /
Write 頂点 距離 Read & Write 先行頂点 Read & Write インデックス Read 辺 重み Read グラフアルゴリズムに 対する要求も多種多様
86.
86 ダイクストラ法で必要なプロパティ 種類 Read /
Write 頂点 距離 Read & Write 先行頂点 Read & Write インデックス Read 辺 重み Read ゴールまでの最小の辺の 数が知りたいだけなんだけど グラフアルゴリズムに 対する要求も多種多様 辺の重みプロパティマップが 定数1を返せばよい
87.
87 ダイクストラ法で必要なプロパティ 種類 Read /
Write 頂点 距離 Read & Write 先行頂点 Read & Write インデックス Read 辺 重み Read ゴールまでの最短距離だけが知りたい 実際の経路は別に分からなくてもよいのだが グラフアルゴリズムに 対する要求も多種多様 先行頂点の書き込みプロパティマップに 何もしないダミーを設定すればよい
88.
プロパティマップ – まとめ •
イテレータにおける「値を取り出す」「値を 書き込む」機能の抽象インタフェイス定義 • うれしいこと3つ – モノの指し示し方が超柔軟に – モノに関連付けられた値の取り出し方・書き込 み方が超柔軟に – 1つのモノに対して複数の値・書き込み先を関 連付ける • 汎用グラフライブラリで威力を発揮 88