#c #object
#c #объект
Вопрос:
Я довольно новичок в C (в VS2019) и пытаюсь создать простую консольную программу. Он запрашивает имя компонента, а затем оценивает его с помощью функции rand() . Мой друг сказал, что я должен использовать группы и объекты, чтобы добавить свои собственные оценки в микс. Теперь у меня есть группа с несколькими примерами компонентов в качестве объектов, и я столкнулся с проблемой. Я не знаю, как проверить, совпадает ли строка для имени компонента с именем любого из объектов. (Скажем, если been == pinto, сопоставьте его с объектом Pinto в группе DataBean и используйте данные объекта.) Я также не хочу использовать строку операторов if, поскольку это беспорядочно и не нужно. Я вообще мало пробовал, так как боюсь испортить программу. Я тоже спросил Google, но это, похоже, не помогло; Скорее всего, у меня нет правильных ключевых слов.
Ответ №1:
Вы должны использовать a std::map<std::string, bean> beans
для выполнения поиска объектов во время выполнения.
Мне кажется, вам нужно как минимум узнать о std ::map и std ::string .
Использование будет выглядеть примерно так:
string name;
cin >> name;
beans[name] = <your bean>;
Затем позже вы можете искать такие компоненты, как
string name;
cin >> name;
if (beans.find(name) != beans.end())
{
beans[name].<do something here>;
}
Комментарии:
1. Еще один вопрос, должна ли группа находиться в файле .cpp? VS предложил мне поместить его в свой собственный файл .h, поэтому я не знаю, будет ли это мешать
2. Глупый я, забыл включить его
3.
if (beans.find(name) != beans.end()) { beans[name]... }
выполняет 2-й избыточный поиск. Чтобы избежать этого, используйтеiterator
thatfind()
возвращает, например:auto iter = beans.find(name); if (iter != beans.end()) { iter->second...; }
4. Реми, я предполагаю, что вы используете «beans» в качестве имени группы и «bean» в качестве строки?