c++ - Is there a better way to do a find with optional insert using unordered_map of objects with no default constructor? -


i have following code:

class cevent { public:     cevent(std::string const&) {} };  std::unordered_map<std::string, cevent> m_messagelist;  cevent& getmessageevent(std::string const& name) {    auto = m_messagelist.find(name);    if (it == m_messagelist.end())    {       auto pair = m_messagelist.emplace(std::piecewise_construct,          std::forward_as_tuple(name),  // copy-construct 'name' key          std::forward_as_tuple(name)); // construct cevent in-place name        return pair.first->second;    }     return it->second; } 

(live sample)

i think code pretty clean, don't have find separate emplace. there way better? or "good enough"? know call emplace instead of find first, accomplish both tasks, means creating cevent every time, if no real insert happens.

once c++17 released (or if compiler supports prerelease versions),

return m_messagelist.try_emplace(name, name).first; should trick.


Comments

Popular posts from this blog

html - Styling progress bar with inline style -

java - Oracle Sql developer error: could not install some modules -

How to use autoclose brackets in Jupyter notebook? -