Перегрузка оператора [] для хеш-таблицы - PullRequest
0 голосов
/ 02 июня 2019

Я хочу перегрузить оператор [] для использования в хеш-таблице, которую я должен сделать для домашней работы. Я использую вектор списков, которые содержат пары. std::vector <std::forward_list<std::pair<std::string, int>>> То, что я хочу сделать от оператора, это вернуть другую часть данной пары, например, если есть пара («test», 21), записав vectorname [«test»], я должен получить 21, или если я должны были написать vectorname ["test"] = 22, это должно изменить пару. Также не должно быть идентичных ключей, или, если они должны были быть, только первый будет принят во внимание. Это мой первый вопрос о переполнении стека, извините, если я не очень хорошо объяснил вещи.

1 Ответ

0 голосов
/ 02 июня 2019

Чтобы делать подобные вещи, вам нужно, чтобы ваш оператор [] возвращал ссылочный тип, который может быть назначен (для обновления таблицы) или просто использован (при чтении хеш-таблицы). Критическое, что вам нужно решить, это то, что делать, когда ключ не присутствует в таблице.

  • немедленно добавьте ключ в таблицу. Это означает, что при попытке прочитать отсутствующий ключ вы добавите его в таблицу со значением по умолчанию (так работают карты STL)
  • не добавляйте ключ, пока вы фактически не назначите элемент. Это больше работы, но позволяет вам иметь значения ключа без конструктора по умолчанию.

В первом случае вы просто возвращаете фактическую ссылку на значение элемента. В последнем случае вам необходимо реализовать пользовательский класс element_ref, который может быть присвоен (operator=) или может быть неявно преобразован в тип значения элемента (operator int в вашем случае).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...