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

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

Восстановить пароль Регистрация
 
vikusechk
 Аватар для vikusechk
1 / 1 / 0
Регистрация: 16.03.2014
Сообщений: 105
16.03.2014, 15:30     Работа с библиотекой STL, контейнер map #1
Ввожу с экрана имя и номер телефона несколько раз, но 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;
}
//---------------------------------------------------------------------------
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2014, 15:30     Работа с библиотекой STL, контейнер map
Посмотрите здесь:

контейнер map C++
C++ задача с stl библиотекой и файлами
C++ Контейнер map ?
C++ Контейнер map
Контейнер map и алгоритмы STL: несовместимость? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5956 / 5561 / 1788
Регистрация: 18.12.2011
Сообщений: 14,210
Завершенные тесты: 1
16.03.2014, 15:35     Работа с библиотекой STL, контейнер map #2
Вынесите строку 55
C++
1
  for_each( Data.begin(), Data.end(), my::print_pair<AnsiString,int>() );
из цикла
vikusechk
 Аватар для vikusechk
1 / 1 / 0
Регистрация: 16.03.2014
Сообщений: 105
16.03.2014, 15:47  [ТС]     Работа с библиотекой STL, контейнер map #3
вынесла, теперь вообще никак не выводит,просто закрывает программу. хотя сделала выход из цикла с помощью break
zss
Модератор
Эксперт С++
 Аватар для zss
5956 / 5561 / 1788
Регистрация: 18.12.2011
Сообщений: 14,210
Завершенные тесты: 1
16.03.2014, 16:00     Работа с библиотекой STL, контейнер map #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 исправил на тройку, чтобы поменьше вводить
Yandex
Объявления
16.03.2014, 16:00     Работа с библиотекой STL, контейнер map
Ответ Создать тему
Опции темы

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