Форум программистов, компьютерный форум CyberForum.ru

Перегрузить операторы = и [] для hash - C++

Восстановить пароль Регистрация
 
dederkay
 Аватар для dederkay
34 / 34 / 0
Регистрация: 08.12.2010
Сообщений: 161
08.04.2012, 17:44     Перегрузить операторы = и [] для hash #1
есть оператор который возвращает значение по ключу, как правильно написать оператор = для возможности писать такое
C++
1
hash["Motion"] = "Moto moto!";
хеш реализован двусвязным списком.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
08.04.2012, 18:32     Перегрузить операторы = и [] для hash #2
dederkay, нужно перегрузить operator= для элемента-значения, которое будет возвращаться (разумеется, по ссылке) при операции [].
dederkay
 Аватар для dederkay
34 / 34 / 0
Регистрация: 08.12.2010
Сообщений: 161
08.04.2012, 19:41  [ТС]     Перегрузить операторы = и [] для hash #3
я так примерно и думал, но если
C++
1
char* operator[](char* strKey)
тогда в
C++
1
2
3
char* operator=(char* data)
Node* Temp = new Node;
Temp->key = _hash(/*откуда достать ключ*/);//или я чёт непонимаю(
помогите плз, ведь это очень интересно) буду благодарен
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
08.04.2012, 19:45     Перегрузить операторы = и [] для hash #4
dederkay, а почему не
C++
1
std::string& operator[](const std::string& strKey)
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
08.04.2012, 19:48     Перегрузить операторы = и [] для hash #5
dederkay, тут нужно использовать std::string, потому что обычные строки через = не присваиваются. В случае, если оператор [] производит ещё и добавление, то в операторе [] нужно создать новую ячейку, посчитать для неё хеш на основе переданного в оператор [] значения и вернуть ссылку на строку (пока пустую), в которую вы и запишите нужное значение. У меня такое ощущение, что вы думаете, что при x["str1"] = "str2" вызовется оператор = для хэш-таблицы. Это не так, вы из operator[] должны возвращать ссылку на значение (тип которого - std::string в нашем случае), для которого и будет вызван оператор =.
Yandex
Объявления
08.04.2012, 19:48     Перегрузить операторы = и [] для hash
Ответ Создать тему
Опции темы

Текущее время: 16:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru