После долгого использования QMap, QHash чего-то захотелось реализовать свой вариант контейнера.
Чего нам не хватало?
Задолбало возвращение элемента по значению
Опрератор [ ] возвращает ссылку не константную с одновременным созданием элемента (если он ещё не существует)
Либо оператор [ ] возвращает константу по значению.
Как следствие мы имеем глобально проблему с управлением контейнером, а именно описанную здесь как изменить в многоуровневом контейнере QMap глубоко вложенный отдельный элемент
Почему нельзя вернуть const & на элемент тоже понятно. Потому, что элемент может ещё не существовать вообще по такому-то ключу. Конечно можно проверить через contains, но это не решает вопрос - что же делать если элемент не существует.
И вот нам пришла мысль подкупающая своей новизной.
Если мы не можем вернуть константную ссылку в случае, когда элемент не существует, значит нам надо иметь при создании контейнера такой элемент обязательно (дефлотно). Можем его обозвать типа UNDEFINED к примеру.
Соответственно теперь можно реализовать оператор получения элемента как const &. Вслучае отсутствия элемента контейнера по ключу возвращать UNDEFINED элемент. Что может быть проще. Вот и вся идея.
Упорядочивание по порядку добавления
И ещё хотелось бы иметь контейнер с упорядочиванием по порядку добавления элементов (как QList например).
Дело в том, что QMap сортирует по ключу, а QHash сортирует произвольно (в буквальном смысле). А иногда надо, что бы сортировка оставалась по порядку добавления элементов.