Advertisement
sve_vash

Untitled

Nov 25th, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.30 KB | None | 0 0
  1. std::pair<iterator, bool> try_emplace(key_type&& k, _Args&&... args) {
  2. auto p = std::pair<key_type, mapped_type>{std::move(k), mapped_type(std::forward<_Args>(args)...)};
  3. const size_type n = hash(p.first);
  4. const size_type index = n % act_size;
  5. if (load_factor() >= max_load_factor()) {
  6. rehash(state.size() * 2);
  7. }
  8. size_t i = index;
  9. while (true) {
  10. if (state[i] == 0) {
  11. new(data + index) value_type{p.first, p.second};
  12. state[i] = 1;
  13. exist_size++;
  14. act_size++;
  15. return std::pair<iterator, bool>(iterator(data, &state, i), true);
  16. }
  17. else if (equal_key(data[i].first, p.first)) {
  18. if (state[i] == 1) {
  19. return std::pair<iterator, bool>(iterator(data, &state, i), false);
  20. }
  21. else {
  22. data[i].second = p.second;
  23. state[i] = 1;
  24. exist_size++;
  25. return std::pair<iterator, bool>(iterator(data, &state, i), true);
  26. }
  27. }
  28. i++;
  29. if (i == state.size()) {
  30. i = 0;
  31. }
  32. if (i == index) {
  33. break;
  34. }
  35. }
  36. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement