Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- std::pair<iterator, bool> try_emplace(key_type&& k, _Args&&... args) {
- auto p = std::pair<key_type, mapped_type>{std::move(k), mapped_type(std::forward<_Args>(args)...)};
- const size_type n = hash(p.first);
- const size_type index = n % act_size;
- if (load_factor() >= max_load_factor()) {
- rehash(state.size() * 2);
- }
- size_t i = index;
- while (true) {
- if (state[i] == 0) {
- new(data + index) value_type{p.first, p.second};
- state[i] = 1;
- exist_size++;
- act_size++;
- return std::pair<iterator, bool>(iterator(data, &state, i), true);
- }
- else if (equal_key(data[i].first, p.first)) {
- if (state[i] == 1) {
- return std::pair<iterator, bool>(iterator(data, &state, i), false);
- }
- else {
- data[i].second = p.second;
- state[i] = 1;
- exist_size++;
- return std::pair<iterator, bool>(iterator(data, &state, i), true);
- }
- }
- i++;
- if (i == state.size()) {
- i = 0;
- }
- if (i == index) {
- break;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement