Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ashta
6 / 6 / 1
Регистрация: 28.08.2012
Сообщений: 65
#1

Multimap зацикливается - C++

16.08.2013, 21:09. Просмотров 349. Ответов 6
Метки нет (Все метки)

Всем добрый вечер,

Помогите, пожалуйста разобраться с зацикленным "Not found". Поиск по названию блюда происходит нормально, а вот если ввести блюдо, которого нет - выводит миллион раз. Поиск осуществляется по значению в multimap.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void Menu::SearchMenu(string dish)
    {
        multimap<Meal, Dish>::iterator it;
        cout<<"Search"<<" \""<<dish<<"\" ";
 
        for (it=MyMenu.begin(); it!=MyMenu.end(); it++)
        {
        
        
            if ((*it).second.GetDish()==dish) 
            {
            
                cout<<"\n\n"<<it->second.GetDish()<<" "<<it->second.GetPrice()<<" "<<it->second.GetType()<<"\n\n";
                
            }                       
                    
        
        else
 
            cout<<"Not found"<<endl;
        }
    }
Сейчас результат по блюду, которого нет http://screencast.com/t/gJL4kR6a

Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.08.2013, 21:09     Multimap зацикливается
Посмотрите здесь:

multimap - C++
Я что-то не понимаю в чем проблема! #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;map&gt; using namespace std; int main() ...

сортировка в multimap - C++
доброго времени суток. собственно, вопрос такой: есть программа использующая контейнер класса multimap. содержит пару &lt;ключ,структура&gt;...

multimap::emplace() - C++
При компиляции этого кода: #include &lt;iostream&gt; #include &lt;map&gt; using namespace std; int main () { multimap&lt;char,int&gt;...

STL multimap. - C++
#include &quot;stdafx.h&quot; #include &lt;map&gt; #include &lt;algorithm&gt; #include &lt;string&gt; #include &quot;conio.h&quot; #include &lt;iostream&gt; using...

Ошибка с multimap - C++
Здравствуйте, помогите пожалуйста разобраться есть multimap переменная T_rules, в которой лежат T_rule_head, T_state_name ...

Подсчет цены в multimap - C++
Всем добрый день, У меня не получается подсчитать стоимость всех заказанных блюд в чеке. Я сохраняю заказ в файл. Помогите,...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
16.08.2013, 21:14     Multimap зацикливается #2
Программа делает ровно то, что написано. А именно - если очередной элемент не является искомым, то печатаем "Not found"
http://www.cplusplus.com/reference/map/multimap/find/
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
16.08.2013, 21:14     Multimap зацикливается #3
после цикла for сделать проверку
C++
1
2
if (it == MyMenu.end())
    cout<<"Not found"<<endl;
ashta
6 / 6 / 1
Регистрация: 28.08.2012
Сообщений: 65
16.08.2013, 21:23  [ТС]     Multimap зацикливается #4
Цитата Сообщение от I.M. Посмотреть сообщение
Программа делает ровно то, что написано. А именно - если очередной элемент не является искомым, то печатаем "Not found"
http://www.cplusplus.com/reference/map/multimap/find/
Спасибо, на этой ссылке была. У меня поиск по значению, а не по ключу.

Добавлено через 50 секунд
Цитата Сообщение от BigLow Посмотреть сообщение
после цикла for сделать проверку
C++
1
2
if (it == MyMenu.end())
    cout<<"Not found"<<endl;

В этой случае Not found только если нет такого элемента. Если же он есть, выводится искомое блюдо, а потом все равно выводит Not found.
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
16.08.2013, 21:27     Multimap зацикливается #5
ashta, если нашелся элемент, то нужно сразу выходить из цикла
C++
1
2
3
4
5
if ((*it).second.GetDish()==dish) 
{        
    cout<<"\n\n"<<it->second.GetDish()<<" "<<it->second.GetPrice()<<" "<<it->second.GetType()<<"\n\n";
    break; // выход
}
Croessmah
Модератор
Эксперт CЭксперт С++
13054 / 7317 / 815
Регистрация: 27.09.2012
Сообщений: 18,053
Записей в блоге: 3
Завершенные тесты: 1
16.08.2013, 21:33     Multimap зацикливается #6
Можно как-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void Menu::SearchMenu(string dish)
    {
        multimap<Meal, Dish>::iterator it;
        cout<<"Search"<<" \""<<dish<<"\" ";
        bool findSuccess = false ;
        for (it=MyMenu.begin(); it!=MyMenu.end(); it++)
        {       
        
            if ((*it).second.GetDish()==dish) 
            {
            
                cout<<"\n\n"<<it->second.GetDish()<<" "<<it->second.GetPrice()<<" "<<it->second.GetType()<<"\n\n";
                findSuccess = true ;
            }
        }
        if ( ! findSuccess )
           std::cout << "Not found" << std::endl ;                          
                    
    }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.08.2013, 21:37     Multimap зацикливается
Еще ссылки по теме:

неверное выполнение multimap - C++
В задачу программы входит заполнения контейнера multimap и вывод содержимого построчно(все на стандартных потоках). Програмка работает но...

Отсортировать multimap по pair->second - C++
отсортировать multimap по полю second-&gt;year , впринципе без разницы по убыванию или возрастанию Я уже много глупостей в коде натворил...

Помещение данных в multimap - C++
добрый день, можете подсказать как можно сделать, те данные что я помещаю в моем коде в map, поместить в multimap вот код ...

Работа с контейнером multimap - C++
Помогите пожалуйста. Вот вся задача: Определить класс autoOwnerDirectory (каталог автовладельцев), хранящий информацию об автовладельцах...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ashta
6 / 6 / 1
Регистрация: 28.08.2012
Сообщений: 65
16.08.2013, 21:37  [ТС]     Multimap зацикливается #7
Цитата Сообщение от BigLow Посмотреть сообщение
ashta, если нашелся элемент, то нужно сразу выходить из цикла
C++
1
2
3
4
5
if ((*it).second.GetDish()==dish) 
{        
    cout<<"\n\n"<<it->second.GetDish()<<" "<<it->second.GetPrice()<<" "<<it->second.GetType()<<"\n\n";
    break; // выход
}
Спасибо, BigLow сейчас все ОК.
Yandex
Объявления
16.08.2013, 21:37     Multimap зацикливается
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru