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

Django REST Framework perform_create: You cannot call `.save()` after accessing `serializer.data` -

Why does Go error when trying to marshal this JSON? -