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

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

Восстановить пароль Регистрация
 
ashta
6 / 6 / 1
Регистрация: 28.08.2012
Сообщений: 65
16.08.2013, 21:09     Multimap зацикливается #1
Всем добрый вечер,

Помогите, пожалуйста разобраться с зацикленным "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 зацикливается
Посмотрите здесь:

C++ STL multimap.
сортировка в multimap C++
неверное выполнение multimap C++
C++ multimap
C++ multimap::emplace()
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
I.M.
 Аватар для 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
Модератор
Эксперт С++
 Аватар для Croessmah
11801 / 6780 / 765
Регистрация: 27.09.2012
Сообщений: 16,833
Записей в блоге: 2
Завершенные тесты: 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 по pair->second C++
Помещение данных в multimap C++
Multimap. Ошибка operator+ not implemented in type multimap C++

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

Или воспользуйтесь поиском по форуму:
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 зацикливается
Ответ Создать тему
Опции темы

Текущее время: 13:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru