田舎暮らしエンジニアの備忘録

2021.08.16
XML
カテゴリ: 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 : 100
string : data2 / num : 200
string : data not found / num : 0
string : data3 / num : 300
string : data4 / num : 400
string : data5 / num : 500
string : data not found / num : 0






★楽天デイリーランキング1位★ 室内用テント プライバシーテント リモートワーク 個室 室内 テント テレワーク 在宅ワーク ぼっちてんと ゲーミングテント 簡易テント 窓付き コンパクト 収納バッグ 在宅勤務 リモート 災害 リモートオフィス

​​
【ふるさと納税】国産!かごしま黒豚さつまロールステーキ20個(合計1kg)鹿児島県産黒豚肉を手作業で巻いた冷凍ロールステーキを小分けパックでお届け!お弁当やおかずに最適【AKR Food Company】





お気に入りの記事を「いいね!」で応援しよう

最終更新日  2021.08.16 22:27:57
コメント(0) | コメントを書く


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
X
Create a Mobile Website
スマートフォン版を閲覧 | PC版を閲覧
Share by: