C++Builderでstd::unordered_mapを使う[JAPAN]

Posted by on in Programming

毛利です。

 

std::unordered_map

先日、「Optimized C++」書籍についてのC++勉強会に参加しました。
その時、std::unordered_mapの議論になりました。
C++Builderでは、std::unordered_mapも使用できます。
 
刈谷さんがstd::unordered_mapについて詳しくスライドを書かれています。
https://www.slideshare.net/kariya_mitsuru/ss-55842496

std::unordered_map はハッシュテーブルで実装されているので
キーの順番などを保持しない場合に有効です。

unordered_map初期化

std::unordered_map<String, TButton*> unordered_map1{
    {"Button_1", new TButton(this)},
    {"Button_2", new TButton(this)},
    {"Button_3", new TButton(this)}
};

“for"文で取得

for (auto b : unordered_map1)
{
    b.second->Name = b.first;
    b.second->Text = b.first;
    int i_{StrToInt(StringReplace(b.first, "Button_", "", TReplaceFlags() << rfReplaceAll) )};
    b.second->Position->X = 10;
    b.second->Position->Y = 10+30*i_;
    b.second->OnClick     = do_add_button;
    this->AddObject(b.second);
}

“at"で取得できます。

void __fastcall TForm1::do_add_button(TObject *Sender)
{
    TButton* b_ = static_cast<TButton*>(Sender);
    UnicodeString s_ = "new" + b_->Name;
    unordered_map1[s_] = new TButton(this);
    unordered_map1[s_]->Position->X = 200;
    unordered_map1[s_]->Position->Y = 40;
    unordered_map1[s_]->Name = s_;
    this->AddObject(unordered_map1[s_] );

}

下記の方法で追記も可能です

///
unordered_map1.emplace("Button_1", new TButton(nullptr));

 



About
Gold User, No rank,
Delphi / C++Builder blogger

Comments

Check out more tips and tricks in this development video: