fork(3) download
  1. #include <unordered_map>
  2. #include <string>
  3. #include <iostream>
  4.  
  5. template<typename Map, typename T>
  6. std::pair<typename Map::iterator, bool>
  7. insert_or_assign(Map& m, const typename Map::key_type& k, const T& t)
  8. {
  9. auto p = m.insert({k, t});
  10. if (!p.second) {
  11. // overwrite previous value
  12. p.first->second = t;
  13. }
  14. return p;
  15. }
  16.  
  17. int main() {
  18. auto map = std::unordered_map<std::string, int>{{"foo", 1}, {"bar", 2}};
  19.  
  20. auto p = map.insert({"foo", 3});
  21. if (p.second) {
  22. // it has just been inserted.
  23. std::cout << "foo was inserted\n";
  24. } else {
  25. // it has been assigned
  26. std::cout << "foo was assigned\n";
  27. }
  28.  
  29. p = map.insert({"hi", 42});
  30. if (p.second) {
  31. // it has just been inserted.
  32. std::cout << "hi was inserted\n";
  33. } else {
  34. // it has been assigned
  35. std::cout << "hi was assigned\n";
  36. }
  37.  
  38. }
Success #stdin #stdout 0s 3464KB
stdin
Standard input is empty
stdout
foo was assigned
hi was inserted