テーマ:プログラミングあれこれ(230)
カテゴリ:C++
今まで使いどころがわからなかった、ラムダ式が便利なのを実感したこと。
他クラスのget/setアクセサをたくさん作らないといけないとき、ラムダ式でデータを取り出す部分だけ共通化すると書く量が減らせる。
unordered_mapでデータを格納している。 unordered_mapのキーには文字列を与えているので、使う側が指定してきたキー文字列をcount()でチェックしている。 何も考えないでget/setアクセサを作ると、用意したいアクセサの数だけチェック処理を書かないといけない。 class DataAccess { public: struct MyData { std::string str = {}; int num = 0; MyData(std::string in_str, int in_num) { str = in_str; num = in_num; } }; DataAccess() { umap_data.emplace("1st", MyData("data1", 100)); umap_data.emplace("2nd", MyData("data2", 200)); umap_data.emplace("3rd", MyData("data3", 300)); umap_data.emplace("4th", MyData("data4", 400)); umap_data.emplace("5th", MyData("data5", 500)); } std::function<MyData(std::string key)> getMyData() { return [&](std::string key) { if (umap_data.count(key) == 0) { return MyData("data not found", 0); } return umap_data.find(key)->second; }; } private: std::unordered_map<std::string, DataAccess::MyData> umap_data; };
ラムダ式で定義した文字列を引数にしてMyDataを取得する関数を使う。 int main() { DataAccess data_access = {}; auto func = data_access.getMyData(); std::vector<std::string> arguments; arguments.push_back("1st"); arguments.push_back("2nd"); arguments.push_back("6th"); arguments.push_back("3rd"); arguments.push_back("4th"); arguments.push_back("5th"); arguments.push_back("9th"); for(auto& argument : arguments) std::cout << "string : " << func(argument).str << " / num : " << func(argument).num << std::endl; }
string : data1 / num : 100 ★楽天デイリーランキング1位★ 室内用テント プライバシーテント リモートワーク 個室 室内 テント テレワーク 在宅ワーク ぼっちてんと ゲーミングテント 簡易テント 窓付き コンパクト 収納バッグ 在宅勤務 リモート 災害 リモートオフィス 【ふるさと納税】国産!かごしま黒豚さつまロールステーキ20個(合計1kg)鹿児島県産黒豚肉を手作業で巻いた冷凍ロールステーキを小分けパックでお届け!お弁当やおかずに最適【AKR Food Company】 お気に入りの記事を「いいね!」で応援しよう
最終更新日
2021.08.16 22:27:57
コメント(0) | コメントを書く
[C++] カテゴリの最新記事
|