Как сопоставить строки с объектами?

#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 that find() возвращает, например: auto iter = beans.find(name); if (iter != beans.end()) { iter->second...; }

4. Реми, я предполагаю, что вы используете «beans» в качестве имени группы и «bean» в качестве строки?