【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;};main関数ラムダ式で定義した文字列を引数にして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 : 100string : data2 / num : 200string : data not found / num : 0string : data3 / num : 300string : data4 / num : 400string : data5 / num : 500string : data not found / num : 0★楽天デイリーランキング1位★ 室内用テント プライバシーテント リモートワーク 個室 室内 テント テレワーク 在宅ワーク ぼっちてんと ゲーミングテント 簡易テント 窓付き コンパクト 収納バッグ 在宅勤務 リモート 災害 リモートオフィス【ふるさと納税】国産!かごしま黒豚さつまロールステーキ20個(合計1kg)鹿児島県産黒豚肉を手作業で巻いた冷凍ロールステーキを小分けパックでお届け!お弁当やおかずに最適【AKR Food Company】