Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
vikusechk
1 / 1 / 0
Регистрация: 16.03.2014
Сообщений: 107
1

Работа с библиотекой STL, контейнер map

16.03.2014, 15:30. Просмотров 804. Ответов 3
Метки нет (Все метки)

Ввожу с экрана имя и номер телефона несколько раз, но for_each почему-то выводит на экран только последнего введенного пользователя, а мне нужно, чтобы выводил всех. Объясните, что я не так делаю? И еще когда пытаюсь вставить for_each в отдельный if(x==3), то на команду 3 вообще никак не реагирует. заранее спасибо!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
//---------------------------------------------------------------------------
#include <algorithm>
#include <iostream>
#include <conio.h>
#include <vcl.h>
#include <map>
#include <stdlib.h>
#pragma hdrstop
#include <iostream>
#include <string>
//---------------------------------------------------------------------------
 
#pragma argsused
namespace my
{
template <class Key, class Value>
struct print_pair
    {
        void operator()(const pair<Key, Value>& p)
        {
                cout << p.first << " -> " << p.second << endl;
        }
    };
}
int main(int argc, char* argv[])
{
    int x;
M1: std::cout<<"Chose the command!"<< " : " << "1=Vvesti v bazu, 2=Poisk, 3=Vyvesti spisok, 4=Vyhod";
    std::cout<< std::endl;
    std::cin>>x;
    if(x<1||x>4)
        {
            std::cout<<"Error!Try again"<<endl;
            goto M1;
        }
    if(x==4) exit;
 
    std::multimap<AnsiString,int>            Data;
    std::multimap<AnsiString,int>::iterator  it;
 
    if (x==1)
        {
            for( int i = 0; i < 10; i++ )
                {
                    char s[10];
                    AnsiString str;
                    int  d;
                    std::cout<< "Enter name"<< std::endl;
                    std::cin>> s;
                    str = AnsiString(s);
                    std::cout<< "Enter date"<< std::endl;
                    std::cin>> d;
                    Data.insert( std::make_pair( str, d ));
                    std::cout<< "Vvod uspewen"<< std::endl;
                    for_each( Data.begin(), Data.end(), my::print_pair<AnsiString,int>() );
                    goto M1;
                }
 
 
        }
 
    getch();
    return 0;
}
//---------------------------------------------------------------------------
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2014, 15:30
Ответы с готовыми решениями:

Контейнер map и алгоритмы STL: несовместимость?
Всем доброго времени суток! Столкнулся с проблемой: алгоритм remove_if не работает с контейнером...

Как считать из файла в контейнер STL (map)
Необходимо считать из файла с поместить в контейнер map, вывести на экран void DBase::DB() {...

Работа с библиотекой STL
Вроде задание несложное, но не могу понять в чем проблема Само задание: В текстовом файле...

Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std::map?
Здравствуйте. Возможно ли создать контейнер std::map, в котором в качестве значения была бы...

задача с stl библиотекой и файлами
В текстовом файле input.txt записаны слова – по одному в строке. Необходимо разбить слова на группы...

3
zss
Модератор
Эксперт С++
8164 / 7281 / 4526
Регистрация: 18.12.2011
Сообщений: 19,262
Завершенные тесты: 1
16.03.2014, 15:35 2
Вынесите строку 55
C++
1
  for_each( Data.begin(), Data.end(), my::print_pair<AnsiString,int>() );
из цикла
0
vikusechk
1 / 1 / 0
Регистрация: 16.03.2014
Сообщений: 107
16.03.2014, 15:47  [ТС] 3
вынесла, теперь вообще никак не выводит,просто закрывает программу. хотя сделала выход из цикла с помощью break
0
zss
Модератор
Эксперт С++
8164 / 7281 / 4526
Регистрация: 18.12.2011
Сообщений: 19,262
Завершенные тесты: 1
16.03.2014, 16:00 4
У Вас ошибки при работе с входным потоком.
После ввода числа указатель потока остается на первом пробельном символе.
Вы после этого вводите строку. Этот пробельный символ оказывается концом строки
и... получается пустая введенная строка.
Попробуйте самостоятельно исправить.

Вот так работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
      for( int i = 0; i < 3; i++ )
      {
                    char s[100];
                    string str;
                    int  d;
                    std::cout<< "Enter name"<< std::endl;
                    std::cin>> s;
                    str = string(s);
                    std::cout<< "Enter date"<< std::endl;
                    std::cin>>d;cin.getline(s,9);
                    Data.insert( std::make_pair( str, d ));
                    std::cout<< "Vvod uspewen"<< std::endl;
                    //goto M1;
      }
      for_each( Data.begin(), Data.end(), my::print_pair<string,int>() );
10 исправил на тройку, чтобы поменьше вводить
0
16.03.2014, 16:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.03.2014, 16:00

Как быть с библиотекой STL
Всем привет!!! У меня проблема с библиотекой STL может кто поможет её решить. #include&lt;list&gt; ...

Контейнер map
Здравствуйте, работаю с контейнером map, анализирую текст, получаю записи типа &quot;слово: число его...

контейнер map
Помогите, пожалуйста дописать программу. Определите карту, в которой ключом является фамилия семьи,...


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

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

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