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

Заполнить map из потока ввода - C++

Восстановить пароль Регистрация
 
rcyn
13 / 9 / 2
Регистрация: 30.01.2014
Сообщений: 47
03.04.2014, 02:24     Заполнить map из потока ввода #1
Добрый день, можно ли заполнить
C++
1
map<key_type, value_type>
при помощи
C++
1
istream_iterator<map<key_type, value_type>> iterator(input_stream)
???

вот код:
Кликните здесь для просмотра всего текста
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
// dummy.cpp
 
#include <iostream>
#include <iomanip>
#include <string>
#include <vector>
#include <map>
#include <unordered_map>
#include <algorithm>
#include <iterator>
 
#include "keep_window_open.hpp"
 
#define MAX_CON_ZIZE 20
 
using namespace std;
 
typedef string key_type;
typedef int value_type;
 
template<class __key_type, class __val_type>
istream & operator>>(istream & is, map<__key_type,__val_type> & con)
{
   __key_type k;
   __val_type v;
   is >> k >> v;
 
   if ( is )
   {
       con.insert(make_pair( k, v ));
   }
 
   return is;
}
 
template<class __key_type, class __val_type>
ostream & operator<<(ostream & os, const map<__key_type,__val_type> & con)
{
   for (map<__key_type,__val_type>::const_iterator It = con.begin(); It != con.end(); It++)
   {
      os << setw(20) << left << It->first << setw(15) << right 
         << It-> second << endl;
   }
 
   return os;
}
 
template<class __key_type, class __val_type>
void readToMap(istream & is, map<__key_type,__val_type> & con)
{
   istream_iterator<map<__key_type,__val_type>> isIterator(is);
   istream_iterator<map<__key_type,__val_type>> fInput;
 
   while (isIterator != fInput)
   {
      copy(isIterator, fInput, con.begin());
   }
   
}
 
 
int main()
{
   
   map<key_type,value_type> mapType; 
   mapType msi;
 
   readToMap(cin, msi); //ошибка компиляции 
   
/*
   cout << "input keys and values whitespaced:" << endl;
   while ( msi.size() < MAX_CON_ZIZE && cin >> msi );
 
   cout << "container filled, know it will pe printed\nprinting..." << endl;
   cout << msi;
 
   msi.clear();
 
*/
   keep_window_open();
   return 0;
}


вывод, в первой строке \vc\include\iterator(259): error C2679: бинарный ">>": не найден оператор, принимающий правый операнд типа "std::map<_Kty,_Ty>"(или приемлемое преобразование отсутствует) говорит что оператор ввода для мапы не перегружен - но он же перегружен и работает, протестировать его можно раскоментировав код в main ( и закоментровав строку с
C++
1
readToMap(cin,msi);
)
если
C++
1
copy(итератор_ввода, итератор_конца_ввода, мапа.begin());
нельзя для map, то как корректно разыменовывать
C++
1
итератор_ввода
который по идее возвращает мапу, чтобы наполнить мапу_переданную_в_аргументе функции заполнения?

Вывод целиком:
Кликните здесь для просмотра всего текста
1>------ Построение начато: проект: dummy, Конфигурация: Debug Win32 ------
1> Source.cpp
1>d:\_soft\vsu2010\vc\include\iterator(259): error C2679: бинарный ">>": не найден оператор, принимающий правый операнд типа "std::map<_Kty,_Ty>" (или приемлемое преобразование отсутствует)
1> with
1> [
1> _Kty=key_type,
1> _Ty=value_type
1> ]
1> d:\_soft\vsu2010\vc\include\istream(1053): может быть "std::basic_istream<_Elem,_Traits> &std::operator >><std::char_traits<char>>(std::basic_istream<_Elem,_Traits> &,signed char *)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> d:\_soft\vsu2010\vc\include\istream(1060): или "std::basic_istream<_Elem,_Traits> &std::operator >><std::char_traits<char>>(std::basic_istream<_Elem,_Traits> &,signed char &)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> d:\_soft\vsu2010\vc\include\istream(1067): или "std::basic_istream<_Elem,_Traits> &std::operator >><std::char_traits<char>>(std::basic_istream<_Elem,_Traits> &,unsigned char *)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> d:\_soft\vsu2010\vc\include\istream(1074): или "std::basic_istream<_Elem,_Traits> &std::operator >><std::char_traits<char>>(std::basic_istream<_Elem,_Traits> &,unsigned char &)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> d:\_soft\vsu2010\vc\include\istream(1084): или "std::basic_istream<_Elem,_Traits> &std::operator >><char,std::char_traits<char>,_Ty>(std::basic_istream<_Elem,_Traits> &&,_Ty &)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ty=std::map<key_type,value_type>
1> ]
1> d:\_soft\vsu2010\vc\include\istream(193): или "std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(std::basic_istream<_Elem,_Traits> &(__cdecl *)(std::basic_istream<_Elem,_Traits> &))"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> d:\_soft\vsu2010\vc\include\istream(199): или "std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(std::basic_ios<_Elem,_Traits> &(__cdecl *)(std::basic_ios<_Elem,_Traits> &))"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> d:\_soft\vsu2010\vc\include\istream(206): или "std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(std::ios_base &(__cdecl *)(std::ios_base &))"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> d:\_soft\vsu2010\vc\include\istream(213): или "std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(std::_Bool &)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> d:\_soft\vsu2010\vc\include\istream(232): или "std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(short &)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> d:\_soft\vsu2010\vc\include\istream(267): или "std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(unsigned short &)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> d:\_soft\vsu2010\vc\include\istream(286): или "std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(int &)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> d:\_soft\vsu2010\vc\include\istream(312): или "std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(unsigned int &)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> d:\_soft\vsu2010\vc\include\istream(330): или "std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(long &)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> d:\_soft\vsu2010\vc\include\istream(348): или "std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(unsigned long &)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> d:\_soft\vsu2010\vc\include\istream(368): или "std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(__int64 &)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> d:\_soft\vsu2010\vc\include\istream(387): или "std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(unsigned __int64 &)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> d:\_soft\vsu2010\vc\include\istream(406): или "std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(float &)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> d:\_soft\vsu2010\vc\include\istream(425): или "std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(double &)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> d:\_soft\vsu2010\vc\include\istream(443): или "std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(long double &)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> d:\_soft\vsu2010\vc\include\istream(461): или "std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(void *&)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> d:\_soft\vsu2010\vc\include\istream(480): или "std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(std::basic_streambuf<_Elem,_Traits> *)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> при попытке сопоставить список аргументов "(std::basic_istream<_Elem,_Traits>, std::map<_Kty,_Ty>)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> and
1> [
1> _Kty=key_type,
1> _Ty=value_type
1> ]
1> d:\_soft\vsu2010\vc\include\iterator(258): при компиляции функции-члена "void std::istream_iterator<_Ty>::_Getval(void)" класса шаблон
1> with
1> [
1> _Ty=std::map<key_type,value_type>
1> ]
1> d:\_soft\vsu2010\vc\include\iterator(225): см. ссылку на создание экземпляров функции шаблон при компиляции "void std::istream_iterator<_Ty>::_Getval(void)"
1> with
1> [
1> _Ty=std::map<key_type,value_type>
1> ]
1> c:\users\_user\documents\visual studio 2012\projects\dummy\dummy\source.cpp(51): см. ссылку на создание экземпляров класса шаблон при компиляции "std::istream_iterator<_Ty>"
1> with
1> [
1> _Ty=std::map<key_type,value_type>
1> ]
1> c:\users\_user\documents\visual studio 2012\projects\dummy\dummy\source.cpp(69): см. ссылку на создание экземпляров функции шаблон при компиляции "std::istream &readToMap<key_type,value_type>(std::istream &,std::map<_Kty,_Ty> &)"
1> with
1> [
1> _Kty=key_type,
1> _Ty=value_type
1> ]
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========


Заранее спасибо!
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2014, 02:24     Заполнить map из потока ввода
Посмотрите здесь:

Считывание с потока ввода C++
C++ Перегрузка потока ввода
C++ Заполнить контейнер map и vector данными из файла
Заполнить map C++
Очистка потока ввода C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.04.2014, 03:35     Заполнить map из потока ввода #2
А это что?
C++
1
mapType msi;
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
03.04.2014, 09:15     Заполнить map из потока ввода #3
Цитата Сообщение от rcyn Посмотреть сообщение
C++
1
<map<__key_type,__val_type>>
замените на
C++
1
<map<__key_type,__val_type> >//пробел между > >
Добавлено через 3 минуты
Цитата Сообщение от rcyn Посмотреть сообщение
map<key_type,value_type> mapType;
mapType msi;
Это компилируется?, странно получается, 1ая строка - map это тип, mapType это переменаая, дальше 2оая строка - переменная, переменная, что это?
может быть в 1ой строке словов typedef забыли?
rcyn
13 / 9 / 2
Регистрация: 30.01.2014
Сообщений: 47
03.04.2014, 10:06  [ТС]     Заполнить map из потока ввода #4
стёр тайпдеф случайно, когда постил

C++
1
2
typedef map<key_type,value_type> mapType; 
   mapType msi;
изменил, ошибка та же
Цитата Сообщение от aLarman Посмотреть сообщение
C++
1
<map<__key_type,__val_type> >//пробел между > >
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
03.04.2014, 10:27     Заполнить map из потока ввода #5
ну у istream_iterator есть метод
C++
1
2
3
4
5
void _Getval()
        {   // get a _Ty value if possible
        if (_Myistr != 0 && !(*_Myistr >> _Myval))//вот тут _Myistr это указатель на cin, а _Myval это мар, и тут нет определенного оператора >> который принимает map
            _Myistr = 0;
        }
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
03.04.2014, 16:29     Заполнить map из потока ввода #6
Исправил так что бы компилировалось, но код "страшный":
Кликните здесь для просмотра всего текста
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <iostream>
#include <iomanip>
#include <string>
#include <vector>
#include <map>
#include <unordered_map>
#include <algorithm>
#include <iterator>
 
#define MAX_CON_ZIZE 20
 
using namespace std;
 
typedef string key_type;
typedef int value_type;
 
namespace std
{
template<class __key_type, class __val_type>
istream & operator>>(istream & is, pair<__key_type,__val_type>& p)
{
   is >> p.first >> p.second;
   return is;
}
 
template<class __key_type, class __val_type>
istream & operator>>(istream & is, map<__key_type,__val_type> & con)
{
   __key_type k;
   __val_type v;
   is >> k >> v;
 
   if ( is )
   {
       con.insert(make_pair( k, v ));
   }
 
   return is;
}
}
 
template<class __key_type, class __val_type>
ostream & operator<<(ostream & os, const map<__key_type,__val_type> & con)
{
   for (typename map<__key_type,__val_type>::const_iterator It = con.begin(); It != con.end(); It++)
   {
      os << setw(20) << left << It->first << setw(15) << right
         << It-> second << endl;
   }
 
   return os;
}
 
template<class __key_type, class __val_type>
void readToMap(istream & is, map<__key_type,__val_type> & con)
{
   typedef istream_iterator<pair<__key_type,__val_type>> isIterator;
   typedef istream_iterator<pair<__key_type,__val_type>> fInput;
 
   //while (isIterator != fInput)
   //{
      copy(isIterator(is), fInput(), inserter(con, con.begin()));
   //}
 
}
 
 
int main()
{
 
   typedef map<key_type,value_type> mapType;
   mapType msi;
 
   readToMap(cin, msi);
 
 
   //cout << "input keys and values whitespaced:" << endl;
   //while ( msi.size() < MAX_CON_ZIZE && cin >> msi );
 
   //cout << "container filled, know it will pe printed\nprinting..." << endl;
   cout << msi;
 
   msi.clear();
 
 
   //keep_window_open();
   return 0;
}
Есть намного лучите варианты реализации заполнения map с потока ввода.

Добавлено через 5 часов 25 минут
Нашел. Вот такой вариант:
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
#include <iostream>
#include <iterator>
#include <string>
#include <algorithm>
#include <map>
 
template <typename T, typename U>
struct Pair : std::pair<T, U>
{
   using typename std::pair<T, U>::pair;
   
   friend std::ostream& operator<<(std::ostream& os, const Pair& p) {
      return os << p.first << ' ' << p.second;
   }
   
   friend std::istream& operator>>(std::istream& is, Pair& p) {
      return is >> p.first >> p.second;
   }
};
 
int main()
{
   std::map<std::string, int> map;
   
   using pair_t = Pair<std::string, int>;
   using input = std::istream_iterator<pair_t>;
   using output = std::ostream_iterator<pair_t>;
   
   std::copy(input(std::cin), input(), std::inserter(map, map.begin()));
   std::copy(map.begin(), map.end(), output(std::cout, "\n"));
   
   return 0;
}
rcyn
13 / 9 / 2
Регистрация: 30.01.2014
Сообщений: 47
03.04.2014, 22:13  [ТС]     Заполнить map из потока ввода #7
Цитата Сообщение от DiffEreD Посмотреть сообщение
using pair_t = Pair<std::string, int>;
* *using input = std::istream_iterator<pair_t>;
* *using output = std::ostream_iterator<pair_t>;
это аналогично

C++
1
typedef Pair<std::string, int> pair_t;
?
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
03.04.2014, 22:16     Заполнить map из потока ввода #8
Да.
rcyn
13 / 9 / 2
Регистрация: 30.01.2014
Сообщений: 47
03.04.2014, 22:21  [ТС]     Заполнить map из потока ввода #9
в чем смысл наследования от Pair только для перегрузки операторов? чтобы избежать возможных конфликтов при подключении различных библиотек, если operator>> будет перегружен для std::pair<T,U> ?
И ещё зачем внутри Pair эта строчка:
Цитата Сообщение от DiffEreD Посмотреть сообщение
using typename std::pair<T, U>::pair;
Без неё наследник не имеет доступа к конструктору предка?

Добавлено через 57 секунд
Цитата Сообщение от DiffEreD Посмотреть сообщение
Да.
Спасибо! Можете ещё на вопрос о наследовании ответить (сразу после вашего последнего поста).
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
03.04.2014, 23:18     Заполнить map из потока ввода #10
Цитата Сообщение от rcyn Посмотреть сообщение
в чем смысл наследования
А иначе зделать пергрузку для pair не получится. Разве что так, но так не хорошо:
Кликните здесь для просмотра всего текста
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
namespace std // вносить в std что свое плохо
{
template <typename T, typename U>
std::ostream& operator<<(std::ostream& os, const std::pair<T, U>& p) {
   return os << p.first << ' ' << p.second;
}
 
template <typename T, typename U>
std::istream& operator>>(std::istream& is, std::pair<T, U>& p) {
   return is >> p.first >> p.second;
}
}
 
int main()
{
   std::map<std::string, int> map;
 
   using pair_t = std::pair<std::string, int>;
   using input = std::istream_iterator<pair_t>;
   using output = std::ostream_iterator<pair_t>;
 
   std::copy(input(std::cin), input(), std::inserter(map, map.begin()));
   std::copy(map.begin(), map.end(), output(std::cout, "\n"));
 
   return 0;
}
Цитата Сообщение от rcyn Посмотреть сообщение
И ещё зачем внутри Pair эта строчка:
using typename std::pair<T, U>::pair;
Делаем доступным в структуре std::pair - иначе не скомпилиться (typename не обязательный, по привычке написал).

Добавлено через 6 минут
Вобщем, для преобразования типов Pair и std::pair
dryg2
0 / 0 / 0
Регистрация: 25.09.2013
Сообщений: 4
03.04.2014, 23:32     Заполнить map из потока ввода #11
alsav22, Могу ли я к Вам обратиться с вопросом?

Добавлено через 6 минут
aLarman, DiffEreD, Простите, что СОВСЕМ не по теме...но больше не у кого узнать...помочь.
В программировании я Ноль...нам Вот задали такое страшное "ОНО"...

Честно говоря, я ничего не понимаю.
И вот...решил попросить у Вас помощи.

Условие задачи таково:

Требуется создать шаблон некоторого целевого класса А, возможно,
реализованный с применением некоторого серверного класса В. Это означает,
что объект класса В используется как элемент класса А. В качестве серверного
класса может быть указан либо класс, созданный программистом либо
класс из стандартной библиотеки — например, std: .vector.

Если вместо серверного класса указан динамический массив, то это означает, что
для хранения элементов контейнерного класса используется массив, размещаемый
с помощью операции new.
Во всех вариантах необходимо предусмотреть генерацию и обработку исключений
для возможных ошибочных ситуаций.
Во всех вариантах показать в клиенте mainO использование созданного класса,
включая ситуации, приводящие к генерации исключений. Показать инстанциро-
вание шаблона для типов int, double, std::string.

Мое задание таково:

Целевой шаблонный класс = Queue

Реализация с применением = Vect

Как??? Я Совсем не понимаю...подскажите, помогите...

С Уважение,
rcyn
13 / 9 / 2
Регистрация: 30.01.2014
Сообщений: 47
07.04.2014, 16:40  [ТС]     Заполнить map из потока ввода #12
Цитата Сообщение от DiffEreD Посмотреть сообщение
template <typename T, typename U>
struct Pair : std:air<T, U>
{
* *using typename std:air<T, U>:air;
friend std::ostream& operator<<(std::ostream& os, const Pair& p) {
* * * return os << p.first << ' ' << p.second;
* *}
friend std::istream& operator>>(std::istream& is, Pair& p) {
* * * return is >> p.first >> p.second;
* *}
};
int main()
{
* *std::map<std::string, int> map;
using pair_t = Pair<std::string, int>;
* *using input = std::istream_iterator<pair_t>;
* *using output = std::ostream_iterator<pair_t>;
std::copy(input(std::cin), input(), std::inserter(map, map.begin()));
* *std::copy(map.begin(), map.end(), output(std::cout, "\n"));
return 0;
Не работает этот код (не компилируется)

error C2886: 'pair<_Ty1,_Ty2>' : symbol cannot be used in a member using-declaration
see reference to class template instantiation 'Pair<T,U>' being compiled
error C2143: syntax error : missing ';' before '='
error C2873: 'pair_t' : symbol cannot be used in a using-declaration
error C2143: syntax error : missing ';' before '='
error C2873: 'input' : symbol cannot be used in a using-declaration
error C2065: 'pair_t' : undeclared identifier
error C2923: 'std::istream_iterator' : 'pair_t' is not a valid template type argument for parameter '_Ty'
error C2143: syntax error : missing ';' before '='
error C2873: 'output' : symbol cannot be used in a using-declaration
error C2065: 'pair_t' : undeclared identifier
error C2923: 'std::ostream_iterator' : 'pair_t' is not a valid template type argument for parameter '_Ty'
error C3861: 'input': identifier not found
error C3861: 'output': identifier not found
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
07.04.2014, 16:53     Заполнить map из потока ввода #13
Быть такого не может. Вот: http://ideone.com/eIEjVu
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
07.04.2014, 17:06     Заполнить map из потока ввода #14
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от rcyn Посмотреть сообщение
Не работает этот код (не компилируется)
А я даже скажу почему. Структура pair описанна в заголовочнике <utility>, который не подключен.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.04.2014, 22:43     Заполнить map из потока ввода
Еще ссылки по теме:

C++ Завершение потока ввода
Очистка потока ввода C++
Ошибка потока ввода C++

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

Или воспользуйтесь поиском по форуму:
rcyn
13 / 9 / 2
Регистрация: 30.01.2014
Сообщений: 47
07.04.2014, 22:43  [ТС]     Заполнить map из потока ввода #15
Цитата Сообщение от DiffEreD Посмотреть сообщение
Быть такого не может. Вот: http://ideone.com/eIEjVu
Visual Studio 2012 не компилится

Цитата Сообщение от Ilot Посмотреть сообщение
А я даже скажу почему. Структура pair описанна в заголовочнике <utility>, который не подключен.
спасибо, заработало

C++
1
2
3
4
5
6
7
8
9
10
11
template<class T, class U>
istream & operator>>(istream & is, std::pair<T, U> & p)
{
   return is >> p.first >> p.second;
}
 
template<class T, class U>
ostream & operator<<(ostream & os, const std::pair<T, U> & p)
{
   return (os << std::setw(20) << std::left << p.first << std::setw(15) << std::right << p.second);
}
Yandex
Объявления
07.04.2014, 22:43     Заполнить map из потока ввода
Ответ Создать тему
Опции темы

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