SlideShare a Scribd company logo
LINQ for C++ のご紹介
@mikiemon_h
目次
・私について
・LINQ for C++ ってなんだ?
・導入方法
・LINQ for C++ の使い方
・その他の機能
・まとめ
私について
Twitter : @mikiemon_h
普通の人。
・公での発表的なものは、これが初。
・仕事は、スマホ向けのゲームアプリ開発。
・最近はもっぱら Unity で C# な感じ。
・ここ数年、まともに C++ を書いてない…。
なんか、ごめんなさい…。
LINQ for C++ ってなんだ?
一言でいうと、
C++上でLINQと似たような機能を
実現するライブラリ
…らしい、です。
LINQ ってなんだ?
統合言語クエリ (LINQ, Language INtegrated
Query, リンクと発音する)とは、.NET
Framework 3.5において、様々な種類のデータ集
合に対して標準化された方法でデータを問い合
わせる(クエリ)ことを可能にするために、言
語に統合された機能のことである。
- Wikipedia 統合言語クエリ より引用 -
(URL http://goo.gl/3ITZ5)
?
ちょっと私にはサッパリ…。
C# での例を見てみましょう。
※ 一部省略されていますが、そこはエスパーしてください。
LINQ for C# の例
var customers = new [] {
new { id = 2, firstName = "Steve", lastName = "Jobs" },
new { id = 3, firstName = "Richard", lastName = "Stallman" },
new { id = 1, firstName = "Bill", lastName = "Gates" },
new { id = 4, firstName = "Linus", lastName = "Torvalds" }
};
var result =
from c in customers
where c.id <= 2
orderby c.id
select c.firstName;
foreach (var name in result) System.Console.WriteLine(name);
←この辺が LINQ
Bill
Steve
!
何となく判りました…よね?
それでは LINQ for C++ の導入方法と
使い方を見ていきましょう。
導入方法
・LINQ for C++ のページにアクセス。
(URL https://cpplinq.codeplex.com/)
・Downloads から cpplinq.hpp をダウンロード。
・cpplinq.hpp を #include する。
なんか NuGet 経由で取得する事も出来るらしいですよ。
LINQ for C++ の使い方
使い方を把握する為に、
先程の LINQ の説明で登場した
C# での例と同等のものを書いてみて、
比較してみましょう。
※ 一部省略されていますが、そこはエスパーしてください。
LINQ for C# の例(再掲)
var customers = new [] {
new { id = 2, firstName = "Steve", lastName = "Jobs" },
new { id = 3, firstName = "Richard", lastName = "Stallman" },
new { id = 1, firstName = "Bill", lastName = "Gates" },
new { id = 4, firstName = "Linus", lastName = "Torvalds" }
};
var result =
from c in customers
where c.id <= 2
orderby c.id
select c.firstName;
foreach (var name in result) System.Console.WriteLine(name);
←この辺が LINQ
Bill
Steve
LINQ for C++ の例 1
using namespace cpplinq;
std::vector<customer> customers = {
{ 2, "Steve", "Jobs" },
{ 3, "Richard", "Stallman" },
{ 1, "Bill", "Gates" },
{ 4, "Linus", "Torvalds" },
};
auto result =
from(customers)
>> where ([](customer const& c) { return c.id <= 2; })
>> orderby ([](customer const& c) { return c.id; })
>> select ([](customer const& c) { return c.first_name; })
>> to_vector();
for (auto name : result) cout << name << endl;
Bill
Steve
この辺が LINQ for C++
↓
例 1 で登場した機能
・from
→ 操作対象のコンテナを設定する。
・where
→ 条件を満たす要素のみ取り出す。
・orderby
→ 昇順にソートする。
・select
→ 要素を射影する。
・to_vector
→ std::vector に変換する。
使い方が大体判ったところで
その他の機能をちょっとだけご紹介
※ 決して面倒くさくなったとかじゃないです。
色々と考慮した結果です。
信じてください。
例 2
std::vector<int> a = { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4 };
std::vector<int> b = { 0, 2, 4, 6, 8, 10, 12 };
show(from(a) >> take(5) >> to_vector());
show(from(a) >> skip(5) >> to_vector());
show(from(a)
>> take_while([](int const x) { return x != 2; })
>> to_vector());
show(from(a)
>> skip_while([](int const x) { return x != 2; })
>> to_vector());
0 0 1 1 2
2 3 3 4 4
0 0 1 1
2 2 3 3 4 4
例 2 で登場した機能
・take
→ 指定個数だけ取り出す。
・skip
→ 指定個数読み飛ばす。
・take_while
→ 条件を満たす間だけ取り出す。
・skip_while
→ 条件を満たす間だけ読み飛ばす。
例 3
int a[] = { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4 };
int b[] = { 0, 2, 4, 6, 8, 10, 12 };
show(from_array(a) >> distinct () >> to_vector());
show(from_array(a) >> union_with (from_array(b)) >> to_vector());
show(from_array(a) >> intersect_with (from_array(b)) >> to_vector());
show(from_array(a) >> except (from_array(b)) >> to_vector());
0 1 2 3 4
0 1 2 3 4 6 8 10 12
0 2 4
1 3
例 3 で登場した機能
・from_array
→ 操作対象の配列を設定する。
・distinct
→ 重複を取り除く。
・union_with
→ 和集合を求める。
・intersect_with
→ 積集合を求める。
・except
→ 差集合を求める。
その他の機能
・from_iterators
・range
・sum / max / min
・concatenate
・to_map / to_lookup
・for_each
・first / first_or_default
… 等
まとめ
・導入がとても簡単。
・LINQ for C++ を使う事で、LINQ にある操作が
有る程度は実現出来る。
・LINQ の構文に寄せてあるので、使い方も
割と簡単。
・Boost じゃない。
質疑応答
有難う御座いました!

More Related Content

PDF
Hello Dark-Side C# (Part. 1)
PDF
C#のキモイ高速プログラミング
PPTX
ぱっと見でわかるC++11
PDF
競技プログラミングにおけるコードの書き方とその利便性
PDF
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...
PPTX
競技プログラミングのためのC++入門
PDF
C++ ポインタ ブートキャンプ
PDF
ビットコインで使われている暗号の基礎を学ぶ
Hello Dark-Side C# (Part. 1)
C#のキモイ高速プログラミング
ぱっと見でわかるC++11
競技プログラミングにおけるコードの書き方とその利便性
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...
競技プログラミングのためのC++入門
C++ ポインタ ブートキャンプ
ビットコインで使われている暗号の基礎を学ぶ

What's hot (19)

PDF
C++入門?
PDF
Javaセキュアコーディングセミナー東京第2回演習
PDF
Haxe vs Unicode
PDF
Cython intro prelerease
PPT
言語処理系入門€10
PDF
Wrapping a C++ library with Cython
PDF
NumPyが物足りない人へのCython入門
PDF
C#勉強会
ODP
Scoped BASIC Presentation1
PDF
Processing資料(2) 再帰
PDF
Cython ことはじめ
PDF
Rubyの御先祖CLUのお話(原本)
PPTX
C++ tips1 #include編
PDF
C++ tips2 インクリメント編
PDF
error handling using expected
PDF
Goをカンストさせる話
PDF
Replace Output Iterator and Extend Range JP
PPTX
N3495 inplace realloc
PDF
Emcjp item21
C++入門?
Javaセキュアコーディングセミナー東京第2回演習
Haxe vs Unicode
Cython intro prelerease
言語処理系入門€10
Wrapping a C++ library with Cython
NumPyが物足りない人へのCython入門
C#勉強会
Scoped BASIC Presentation1
Processing資料(2) 再帰
Cython ことはじめ
Rubyの御先祖CLUのお話(原本)
C++ tips1 #include編
C++ tips2 インクリメント編
error handling using expected
Goをカンストさせる話
Replace Output Iterator and Extend Range JP
N3495 inplace realloc
Emcjp item21
Ad

Similar to Boost17 cpplinq (20)

PDF
Linq To Fun
PDF
LINQソースでGO!
PPTX
LINQ to なにがし
PDF
LINQ in Unity
PDF
An Internal of LINQ to Objects
PDF
linq.js - Linq to Objects for JavaScript
PPTX
20080201
PDF
非.NETerに向けたLINQの紹介
PDF
The History of LINQ
PDF
Final LINQ Extensions
PPTX
LINQ 概要 + 結構便利な LINQ to XML
PDF
VS勉強会 .NET Framework 入門
PPTX
C# linq
PDF
Boost.PropertyMap (.pdf)
PPTX
Boost.PropertyMap (.pptx)
PPTX
C# 3.0 以降
PDF
MlnagoyaRx02
PPTX
C#を始めたばかりの人へのLINQ to Objects
PPTX
Linqことはじめ
PDF
120418 tokyo node5_lin_qonnodejs
Linq To Fun
LINQソースでGO!
LINQ to なにがし
LINQ in Unity
An Internal of LINQ to Objects
linq.js - Linq to Objects for JavaScript
20080201
非.NETerに向けたLINQの紹介
The History of LINQ
Final LINQ Extensions
LINQ 概要 + 結構便利な LINQ to XML
VS勉強会 .NET Framework 入門
C# linq
Boost.PropertyMap (.pdf)
Boost.PropertyMap (.pptx)
C# 3.0 以降
MlnagoyaRx02
C#を始めたばかりの人へのLINQ to Objects
Linqことはじめ
120418 tokyo node5_lin_qonnodejs
Ad

Boost17 cpplinq