как описывать типы данных структур, и их взаимодейтсиве
У меня есть язык С++,но работаю в структурах как в си. У меня описана структура конфеты(цвет, вкус), конфет может быть н-количество. Хочу создать структуру коробка, коробок тоже н-количество, коробка как и в жизни может тоже вмещать себя н-количество конфет, и это количество конфет может естественно меняться. Список конфет описан в файле, думаю файл представляет из себя коробку. пример файла: красная клубника зеленая яблоко синий голубика Вопрос как описать структуру коробки, и нужна ли она вообще ? в дальнейшем мне надо будет считать среднее количество конфет, именно в одной коробке, добавлять новое описание конфет, допустим отзыв о конфете, новые коробки, так же заполнение структур должно быть в разных потоках, что бы не висла программа.
Ответы (1 шт):
Вообше то экономические расчеты легче выполнять с помощью матриц. Вы, например, можете хранить матрицу с нулевыми значениями, где количество строк соответствует количеству цветов, а количество столбцов _ количеству вкусов. Остается лишь присваивать элементы по соответствующие индексам
[цвет][вкус], потом выполнять нужные действия... (И цвет и вкус могут быть членами enum).
Но (не до конца известны ваши намерения) если этот подход не подходит под вашу задачу, можете определить класс (или пространство имен для функций и обьектов) записей, где можете определить что и как выполнять. Например:
class Records {
//цвет, вкус
using Candy = std::pair<std::string, std::string>;
//конфеты, количество
using Box = std::map<Candy, size_t>;
public:
/*добавить коробку с конфетами
(сами решайте как поступят данные)*/
void add([[maybe_unused]] std::istream& in) { /*...*/ }
// cчитать среднее количество конфет в n_ной коробке
[[nodiscard]] double
count_average(const size_t n) const noexcept {
if (n < boxes.size()) {
size_t sum = 0;
for (const auto& p : boxes[n])
sum += p.second;
return (double)sum / boxes[n].size();
}
return 0;
}
//...
private:
// все коробки сюда
std::vector<Box> boxes;
};