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

Заполнить 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 += (openText << (24 - (i * 8))); } sizeOpenText += 4; for (int i = sizeOpenText; i < sizeOpenText + 4; i++) { D += (openText << (24 - (i * 8)));
Вставить тире между последовательностью чисел C++
Написал программу которая вставляет тире между последовательностью чисел, все вроде бы хорошо, работает, но нашел баг, ввожу числа типа 12456788, а получаю: 1-2,4-8,8 .В чем проблема? Почему 8 повторяется два раза, где тире и как отдельная цифра? Помогите пожалуйста, заранее спасибо!!!:))) #include <iostream> #include <string> using namespace std; int main() { string a;
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; подробнее

Показать сообщение отдельно
DiffEreD
 Аватар для DiffEreD
1425 / 762 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
03.04.2014, 16:29     Заполнить map из потока ввода
Исправил так что бы компилировалось, но код "страшный":
Кликните здесь для просмотра всего текста
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;
}
 
Текущее время: 23:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru