Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
ashta
9 / 9 / 4
Регистрация: 28.08.2012
Сообщений: 65
1

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

16.08.2013, 21:09. Просмотров 389. Ответов 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

Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.08.2013, 21:09
Ответы с готовыми решениями:

Multimap. Ошибка operator+ not implemented in type multimap
Я начинающий в си, есть задача подсчета частоты встречаемости символов, делал...

multimap
Я что-то не понимаю в чем проблема! #include &lt;iostream&gt; #include &lt;string&gt;...

сортировка в multimap
доброго времени суток. собственно, вопрос такой: есть программа использующая...

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

multimap::emplace()
При компиляции этого кода: #include &lt;iostream&gt; #include &lt;map&gt; using...

6
I.M.
567 / 550 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
16.08.2013, 21:14 2
Программа делает ровно то, что написано. А именно - если очередной элемент не является искомым, то печатаем "Not found"
http://www.cplusplus.com/reference/map/multimap/find/
0
BigLow
55 / 55 / 6
Регистрация: 07.07.2013
Сообщений: 345
16.08.2013, 21:14 3
после цикла for сделать проверку
C++
1
2
if (it == MyMenu.end())
    cout<<"Not found"<<endl;
0
ashta
9 / 9 / 4
Регистрация: 28.08.2012
Сообщений: 65
16.08.2013, 21:23  [ТС] 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.
0
BigLow
55 / 55 / 6
Регистрация: 07.07.2013
Сообщений: 345
16.08.2013, 21:27 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; // выход
}
1
Croessmah
++Ͻ
14610 / 8364 / 1576
Регистрация: 27.09.2012
Сообщений: 20,558
Записей в блоге: 2
Завершенные тесты: 1
16.08.2013, 21:33 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 ;                          
                    
    }
1
ashta
9 / 9 / 4
Регистрация: 28.08.2012
Сообщений: 65
16.08.2013, 21:37  [ТС] 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 сейчас все ОК.
0
16.08.2013, 21:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.08.2013, 21:37

STL multimap.
#include &quot;stdafx.h&quot; #include &lt;map&gt; #include &lt;algorithm&gt; #include &lt;string&gt;...

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

Отсортировать multimap по pair->second
отсортировать multimap по полю second-&gt;year , впринципе без разницы по убыванию...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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