Вернуть ссылку на объект, закешированную в unordered_map

Я думал что уже разобрался в ссылках C++, но видимо не до конца. Хочу сделать класс, который хранит набор свойств Еды. Белки, Жиры, Углеводы и все такое. Использую unordered_map: ключ просто число, по которому планирую в будущем доставать из локали итоговое наименование продукта, а значение набор конкретных характеристик продукта.

Вот текущий код, ругается что у свойств отсутствует конструктор копирования, но я на самом деле не хочу ничего копировать, я хочу чтобы он вернул саму ссылку.

class MealStandart final {
        std::unordered_map<Naming, const MealProperties&> _mStandart;

    public:
        MealStandart() = default;
        ~MealStandart() = default;

        void registerMeal(Naming naming, const MealProperties& mealProperties) {
            _mStandart.insert( { naming, mealProperties } );
        }

        MealProperties& getMeal(Naming naming) const noexcept {
            auto search = _mStandart.find(naming);
            return search != _mStandart.end()
                ? search->second // тут ругается на отсутствие подходящего конструктора копирования
                : nullptr;
        }
    };  

Ответы (1 шт):

Автор решения: Sergey Inozemcev

Изменил возвращаемое значение на указатель. В таком виде все в порядке. Не знаю насколько правда это правильно.

class MealStandart final {
    std::unordered_map<Naming, const MealProperties&> _mStandart;

public:
    MealStandart() = default;
    ~MealStandart() = default;

    void registerMeal(Naming naming, const MealProperties& mealProperties) {
        _mStandart.insert( { naming, mealProperties } );
    }

    std::shared_ptr<MealProperties> getMeal(Naming naming) noexcept {
        auto search = _mStandart.find(naming);
        return search != _mStandart.end()
            ? std::make_shared<MealProperties>(search->second)
            : nullptr;
    }
};
→ Ссылка