Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
13 / 9 / 5
Регистрация: 30.01.2014
Сообщений: 47

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

03.04.2014, 02:24. Показов 3232. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, можно ли заполнить
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(2 59): 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_is tream<_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_is tream<_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_is tream<_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_is tream<_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>::oper ator >>(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>::oper ator >>(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>::oper ator >>(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>::oper ator >>(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>::oper ator >>(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>::oper ator >>(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>::oper ator >>(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>::oper ator >>(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>::oper ator >>(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>::oper ator >>(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>::oper ator >>(__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>::oper ator >>(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>::oper ator >>(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>::oper ator >>(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>::oper ator >>(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>::oper ator >>(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>::oper ator >>(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::ist ream &,std::map<_Kty,_Ty> &)"
1> with
1> [
1> _Kty=key_type,
1> _Ty=value_type
1> ]
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========


Заранее спасибо!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.04.2014, 02:24
Ответы с готовыми решениями:

Заполнить map
Как заполнить этот &quot;мар&quot; несколькими значениями к фамилии? #include&lt;iostream&gt; using namespace std; #include&lt;vector&gt; ...

Заполнить контейнер map и vector данными из файла
Текстовый файл содержит в себе информацию о пяти лифтах в виде: 12 900 first 10 600 second 15 700 third 20 1000 fourth 16 800...

Очистка потока ввода
ПОМОГИТЕ НАЙТИ ОШИБКУ Ребят написал малюсенький фрагмент кода, но уже есть ошибка. после того как вводим сh, почему то нельзя ввести...

14
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
03.04.2014, 03:35
А это что?
C++
1
mapType msi;
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
03.04.2014, 09:15
Цитата Сообщение от 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 забыли?
0
13 / 9 / 5
Регистрация: 30.01.2014
Сообщений: 47
03.04.2014, 10:06  [ТС]
стёр тайпдеф случайно, когда постил

C++
1
2
typedef map<key_type,value_type> mapType; 
   mapType msi;
изменил, ошибка та же
Цитата Сообщение от aLarman Посмотреть сообщение
C++
1
<map<__key_type,__val_type> >//пробел между > >
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
03.04.2014, 10:27
ну у 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;
        }
0
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
03.04.2014, 16:29
Исправил так что бы компилировалось, но код "страшный":
Кликните здесь для просмотра всего текста
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;
}
3
13 / 9 / 5
Регистрация: 30.01.2014
Сообщений: 47
03.04.2014, 22:13  [ТС]
Цитата Сообщение от 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;
?
0
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
03.04.2014, 22:16
Да.
1
13 / 9 / 5
Регистрация: 30.01.2014
Сообщений: 47
03.04.2014, 22:21  [ТС]
в чем смысл наследования от Pair только для перегрузки операторов? чтобы избежать возможных конфликтов при подключении различных библиотек, если operator>> будет перегружен для std::pair<T,U> ?
И ещё зачем внутри Pair эта строчка:
Цитата Сообщение от DiffEreD Посмотреть сообщение
using typename std::pair<T, U>::pair;
Без неё наследник не имеет доступа к конструктору предка?

Добавлено через 57 секунд
Цитата Сообщение от DiffEreD Посмотреть сообщение
Да.
Спасибо! Можете ещё на вопрос о наследовании ответить (сразу после вашего последнего поста).
0
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
03.04.2014, 23:18
Цитата Сообщение от 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
1
0 / 0 / 0
Регистрация: 25.09.2013
Сообщений: 4
03.04.2014, 23:32
alsav22, Могу ли я к Вам обратиться с вопросом?

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

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

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

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

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

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

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

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

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

С Уважение,
0
13 / 9 / 5
Регистрация: 30.01.2014
Сообщений: 47
07.04.2014, 16:40  [ТС]
Цитата Сообщение от 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
0
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
07.04.2014, 16:53
Быть такого не может. Вот: http://ideone.com/eIEjVu
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
07.04.2014, 17:06
Лучший ответ Сообщение было отмечено rcyn как решение

Решение

Цитата Сообщение от rcyn Посмотреть сообщение
Не работает этот код (не компилируется)
А я даже скажу почему. Структура pair описанна в заголовочнике <utility>, который не подключен.
1
13 / 9 / 5
Регистрация: 30.01.2014
Сообщений: 47
07.04.2014, 22:43  [ТС]
Цитата Сообщение от 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);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.04.2014, 22:43
Помогаю со студенческими работами здесь

Создание потока ввода
Объясните, плиз, почему не получается инициализировать поток ввода внутри оператора switch ? код вот такой switch(mode){ case...

Проверка потока ввода
Всем привет , возникла проблема , которая вызывает затруднения. #include &lt;iostream&gt; using namespace std; int...

Ошибка потока ввода
Здравствуйте. Подскажите, почему в этой простой программе, ошибка с оператором потокового ввода &quot;&lt;&lt;&quot;? Пишет,...

Считывание с потока ввода
На стандартном потоке ввода задаётся последовательность целых чисел. Каждое число последовательности не меньше -20000000 и не больше...

Завершение потока ввода
Всем привет,столкнулся с небольшой проблемой,расскажите почему так происходит собственно.. сама суть проблемы.. После ввода нескольких...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru