Как мне работать с Set и Custom Classes? - PullRequest
0 голосов
/ 16 мая 2019

До сих пор я думал, что было бы неплохо создать коллекцию ингредиентов, чтобы что-то составить список всех возможных ингредиентов для моего запаса. И сравнить этот запас с необходимыми ингредиентами. Таким образом, я хочу уменьшить количество ингредиентов на складе.

Ingedients (zutat) - это один класс, который содержит строковое имя и удвоенный для количества.

Набор должен содержать ингредиент. Комплект

Пока я не узнаю много ошибок. Ошибка компоновщика, которую я мог бы решить - написать в новом проекте.

Но мне не нравится мой класс Zutat. Так как он работает только до тех пор, пока у меня есть открытые атрибуты, а не частные атрибуты, которые я мог бы вызвать с помощью getter и установить с помощью setter. На мой взгляд, эти публичные атрибуты идут вразрез.

Я перегрузил оператор bool <, чтобы сопоставить только имя ингредиента. Так как я не хочу больше одного на складе. </p>

Но теперь я застрял ... Я действительно думал, что смогу вернуть класс, чтобы изменить количественное значение. Но с помощью find я получаю только итератор, если имя совпадает. Я действительно думал, что можно было бы вернуть элемент обратно для работы с элементом стека. Чем удалить этот элемент из стека, так как эти значения являются постоянными, и снова вставить значение после того, как я изменил количество.

Если невозможно работать с элементами внутри набора или, по крайней мере, вернуть их обратно. Зачем тебе это вообще использовать?

Что бы вы порекомендовали использовать, чтобы получить коллекцию ингредиентов без дубликатов, где я мог бы изменить значения.

1 Ответ

0 голосов
/ 16 мая 2019

Вместо использования std :: set просто используйте std :: map , например std::map<std::string, int>, ключ - это имя ингредиента, а значение - сумма.ингредиента.

Это позволяет быстро получить количество ингредиента из его названия или изменить количество.

Когда количество ингредиента становится равным 0, вы можете удалить его с карты , если хотите, чтобы в нем был только тот ингредиент, который у вас есть в наличии

ИзКонечно, вы можете заменить количество на большее, например, std::map<std::string, Ingredient>, где класс Ингредиент содержит количество, и другая информация, подобная этой, может снова быть названием ингредиента.

...