Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.09.2009, 19:27   #1
Olya90
Форумчанин
 
Аватар для Olya90
 
Регистрация: 16.03.2009
Сообщений: 125
Подмигивание STL Map

Обьясните пожалуйста что можно делать с контейнером map на С++ ??? А то что-то в книге неясно написано
Если помогла нажмите на весы
Olya90 вне форума Ответить с цитированием
Старый 28.09.2009, 05:24   #2
megachuhancer
Форумчанин
 
Регистрация: 16.04.2009
Сообщений: 247
По умолчанию

Цитата:
что можно делать с контейнером map на С++ ???
Использовать по назначению . Это ассоциативный массив.
Например:
Код:
#include <string>
#include <map>
using namespace std;
map < string, int > m;
int main() {
   m["ababaca"] = 666;
   return 0;
}
megachuhancer вне форума Ответить с цитированием
Старый 28.09.2009, 12:49   #3
Olya90
Форумчанин
 
Аватар для Olya90
 
Регистрация: 16.03.2009
Сообщений: 125
По умолчанию

спасибо ))

а как сделать так:
у меня есть файл data.txt и в нем:
Alex 3
Gena 6

как написать чтобы создавался такой ассоциативный массив просто из таким же названием как в текстовом файле и сразу присваивал нужное значение int.
И еще вопрос как просматривать данные нужного мне массива ??
Если помогла нажмите на весы

Последний раз редактировалось Stilet; 29.09.2009 в 10:30.
Olya90 вне форума Ответить с цитированием
Старый 28.09.2009, 15:36   #4
megachuhancer
Форумчанин
 
Регистрация: 16.04.2009
Сообщений: 247
По умолчанию

Код:
#include <fstream>
#include <string>
#include <map>
#include <utility> 
using namespace std;
map < string, int > m;
int main() {
   ifstream fi("input.txt");
   ofstream fo("output.txt");
   while(!fi.eof()) {
      char str[20];
      fi.getline(str, 20, ' ');
      int b;
      fi >> b;
      m[str] = b;
      fi.getline(str, 20, '\n');
   }
   //пробежаться можно итератором
   //итератор имитирует указатель
   for(map < string, int> :: iterator i = m.begin(); i != m.end(); i++) {
      //элемент map'a - это пара(pair из <utility>), first - это индекс, second - значение
      fo << i -> first << ' ' << i -> second << endl;
   }
   fi.close();
   fo.close();
}
megachuhancer вне форума Ответить с цитированием
Старый 28.09.2009, 19:23   #5
Olya90
Форумчанин
 
Аватар для Olya90
 
Регистрация: 16.03.2009
Сообщений: 125
По умолчанию

Цитата:
Сообщение от megachuhancer Посмотреть сообщение
Код:
#include <fstream>
#include <string>
#include <map>
#include <utility> 
using namespace std;
map < string, int > m;
int main() {
   ifstream fi("input.txt");
   ofstream fo("output.txt");
   while(!fi.eof()) {
      char str[20];
      fi.getline(str, 20, ' ');
      int b;
      fi >> b;
      m[str] = b;
      fi.getline(str, 20, '\n');
   }
   //пробежаться можно итератором
   //итератор имитирует указатель
   for(map < string, int> :: iterator i = m.begin(); i != m.end(); i++) {
      //элемент map'a - это пара(pair из <utility>), first - это индекс, second - значение
      fo << i -> first << ' ' << i -> second << endl;
   }
   fi.close();
   fo.close();
}
в конце кода "fo" как я поняла делает вывод в файл. А как можно просто в консоли посмотреть ?
Если помогла нажмите на весы
Olya90 вне форума Ответить с цитированием
Старый 29.09.2009, 08:25   #6
megachuhancer
Форумчанин
 
Регистрация: 16.04.2009
Сообщений: 247
По умолчанию

Код:
#include <fstream>
#include <string>
#include <map>
#include <utility> 
#include <iostream>
using namespace std;
map < string, int > m;
int main() {
   ifstream fi("input.txt");
   while(!fi.eof()) {
      char str[20];
      fi.getline(str, 20, ' ');
      int b;
      fi >> b;
      m[str] = b;
      fi.getline(str, 20, '\n');
   }
   //пробежаться можно итератором
   //итератор имитирует указатель
   for(map < string, int> :: iterator i = m.begin(); i != m.end(); i++) {
      //элемент map'a - это пара(pair из <utility>), first - это индекс, second - значение
      cout << i -> first << ' ' << i -> second << endl;
   }
   fi.close();
}
megachuhancer вне форума Ответить с цитированием
Старый 29.09.2009, 20:01   #7
Olya90
Форумчанин
 
Аватар для Olya90
 
Регистрация: 16.03.2009
Сообщений: 125
По умолчанию

а как можно сразу присвоить map < string, int > m; нулю ??
Если помогла нажмите на весы
Olya90 вне форума Ответить с цитированием
Старый 30.09.2009, 05:25   #8
megachuhancer
Форумчанин
 
Регистрация: 16.04.2009
Сообщений: 247
По умолчанию

Не понял вопрос. Точнее сформулируй.

Если ты про то, что в m нет элементов, которым можно было бы присвоить значение, то если такого элемента нет, он создаётся при первом обращении. Это потому, что map - класс, у которого перегружена операция [].

На деле данные хранятся в виде красно-чёрного дерева, кажется так.
megachuhancer вне форума Ответить с цитированием
Старый 30.09.2009, 20:33   #9
Olya90
Форумчанин
 
Аватар для Olya90
 
Регистрация: 16.03.2009
Сообщений: 125
По умолчанию

Ну например у меня есть файл data.txt и в нем:
4 (это будет n-количество работы цыкла)
Alex 5
Gena 7
Katya 2
Alex -2

Как мне можно сразу прочитать только имена и присвоить им значения ноль??




Может мне нужно сначала пробежаться по файлу и просто пропуская цыфры присваивать им ноль??? Если так то как потом когда всем присвоим нолики начать чтение этого же файла (data.txt) сначала ??
Если помогла нажмите на весы

Последний раз редактировалось Olya90; 30.09.2009 в 20:37.
Olya90 вне форума Ответить с цитированием
Старый 01.10.2009, 13:36   #10
megachuhancer
Форумчанин
 
Регистрация: 16.04.2009
Сообщений: 247
По умолчанию

Цитата:
Может мне нужно сначала пробежаться по файлу и просто пропуская цыфры присваивать им ноль??? Если так то как потом когда всем присвоим нолики начать чтение этого же файла (data.txt) сначала ??
Не, ну можно, только непонятно зачем.

Код:
#include <fstream>
#include <string>
#include <map>
#include <utility> 
#include <iostream>
using namespace std;
map < string, int > m;
int main() {
   ifstream fi("input.txt");
   while(!fi.eof()) {
      char str[20];
      fi.getline(str, 20, ' ');
      int b;
      fi >> b;
      m[str] /*= b*/; //ничего не присваиваем
      fi.getline(str, 20, '\n');
   }
   //пробежаться можно итератором
   //итератор имитирует указатель
   for(map < string, int> :: iterator i = m.begin(); i != m.end(); i++) {
      //элемент map'a - это пара(pair из <utility>), first - это индекс, second - значение
      cout << i -> first << ' ' << i -> second << endl;
   }
   
   //очищаем флаги ошибок - это чтобы сбросить eof   
   fi.clear();
   //здесь устанавливаем read pointer на начало
   fi.seekg(0, ios::beg);
   while(!fi.eof()) {
      char str[20];
      fi.getline(str, 20, ' ');
      int b;
      fi >> b;
      m[str] = b; //точно такой же код, но здесь уже присваиваем числа
      fi.getline(str, 20, '\n');
   }
   for(map < string, int> :: iterator i = m.begin(); i != m.end(); i++) {
      cout << i -> first << ' ' << i -> second << endl;
   }
   
   fi.close();
   return 0;
}

Последний раз редактировалось megachuhancer; 01.10.2009 в 13:58.
megachuhancer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализация контейнера map. fabregas Общие вопросы C/C++ 11 19.04.2013 16:23
валидность тега map wall66 HTML и CSS 4 01.09.2009 13:53
File Map MaTBeu Win Api 5 17.11.2008 15:38
Google Map API qwestor PHP 3 22.01.2008 08:12