Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Работа с функциями и ошибка "Subscript requires array or pointer type" http://www.cyberforum.ru/cpp-beginners/thread1137634.html
Ребят, такая проблема. вот код #include <iostream> #include <ctime> #include <cmath> using namespace std; int n,i;
C++ Найти подмножество множества Программа должна позволять вводить с клавиатуры множество чисел, и находить подмножество множества. Т.е например если введено множество А(1,2,3) нужно найти подмножество множества А. http://www.cyberforum.ru/cpp-beginners/thread1137633.html
C++ Гаммирование с обратной связью
Не получается реализовать гаммирование с обратной связью. Может быть я не правильно понимаю суть. Помогите, пожалуйста. Вот мой код: for (int i = 0; i < sizeOpenText + 4; i++) { C +=...
Вставить тире между последовательностью чисел C++
Написал программу которая вставляет тире между последовательностью чисел, все вроде бы хорошо, работает, но нашел баг, ввожу числа типа 12456788, а получаю: 1-2,4-8,8 .В чем проблема? Почему 8...
C++ Битовые операции http://www.cyberforum.ru/cpp-beginners/thread1137624.html
Пункт 1.4 Правил: размещайте задание на русском языке.
C++ Суммировать элементы столбца матрицы #include <iostream>; #include<locale> using namespace std; int mas1 ,m,n,mas2,k,i,j,mas3,mas4,q,mas5,h; int main() { setlocale(LC_ALL,"Rus"); cin>>m; cout<<endl; cin>>n; подробнее

Показать сообщение отдельно
rcyn
13 / 9 / 2
Регистрация: 30.01.2014
Сообщений: 47

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

03.04.2014, 02:24. Просмотров 797. Ответов 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(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 ==========


Заранее спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru