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

Функция считывания из файла для map - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
fallti
0 / 0 / 0
Регистрация: 04.03.2010
Сообщений: 18
04.03.2010, 17:28     Функция считывания из файла для map #1
в файле задана последовательность ключ-точка(map<string,MYPOINT>). Помогите, пожалуйста, написать функцию считывания из файла, а то везде есть функция только для записи.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,309
04.03.2010, 17:30     Функция считывания из файла для map #2
Приведи эту функцию. Функция считывания будет очень-очень похожей.
fallti
0 / 0 / 0
Регистрация: 04.03.2010
Сообщений: 18
04.03.2010, 17:32  [ТС]     Функция считывания из файла для map #3
C++
1
2
3
4
void SaveObj(fstream &outFile){
   for(map < string, MYPOINT> :: iterator i = arrObj.begin(); i != arrObj.end(); i++)
      outFile<< i -> first << ' ' << i -> second;
}
но при считывании с файла мы же должны использовать буфер, так?
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
04.03.2010, 17:34     Функция считывания из файла для map #4
fallti, пример входных данных приведите...
fallti
0 / 0 / 0
Регистрация: 04.03.2010
Сообщений: 18
04.03.2010, 17:39  [ТС]     Функция считывания из файла для map #5
театр х у
большой 0 0
средний 6 8
малый 11 7

Добавлено через 1 минуту
для точки написана структура
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#pragma once
 
#include <iostream>
using namespace std;
struct MYPOINT{
    int x,y;
    MYPOINT():x(0),y(0){}
    MYPOINT(int nX,int nY):x(nX),y(nY){}
    MYPOINT(const MYPOINT &cop):x(cop.x),y(cop.y){}
    friend istream &operator>>(istream &input,MYPOINT &op){
        input>>op.x>>op.y;
        return input;
    }
    friend ostream &operator<<(ostream &output,MYPOINT &op){
        output<<op.x<<op.y;
        return output;
    }   
};
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,309
04.03.2010, 18:24     Функция считывания из файла для map #6
Тогда где-то так (не проверял!):
C++
1
2
3
4
5
6
7
8
void LoadObj(ifstream &inFile, map<string, MYPOINT> &dest){
   while(!inFile.eof()) {
      string key;
      MYPOINT pt;
      inFile >> key >> pt;
      dest[key] = pt;
   }
}
fallti
0 / 0 / 0
Регистрация: 04.03.2010
Сообщений: 18
04.03.2010, 18:46  [ТС]     Функция считывания из файла для map #7
Спасибо, я даже и не думал, что можно на столько просто сделать...
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
04.03.2010, 18:52     Функция считывания из файла для map #8
fallti, вот, чё получилось
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
#include <iostream>
#include <fstream>
#include <string>
#include <map>
 
struct Point {
    int x;
    int y;
};
 
class Buf {
public:
    Buf() {}
    ~Buf() {}
    bool addToMap(std::map<std::string, Point>& m){
        std::pair<std::map<std::string, Point>::iterator, bool> im;
        im = m.insert(std::pair<std::string, Point>(name, pt));
        return im.second;
    }
    friend std::istream& operator >> (std::istream& ist, Buf& b){
        ist >> b.name >> b.pt.x >> b.pt.y;
        return ist;
    }
 
private:
    std::string name;
    Point pt;
};
 
int main(){
    const char* file_name = "teatr.txt";
    std::string tmp;
    std::map<std::string, Point> arr;
    std::ifstream ifs(file_name);
    if ( !ifs.is_open() ){
        std::cerr << "Can't open input file" << std::endl;
        return 1;
    }
    // пропустить первую строку
    std::getline(ifs, tmp);
    Buf buf;
    while ( ifs >> buf){
        if ( !buf.addToMap(arr) ){
            std::cerr << "Error adding elements" << std::endl;
            return 1;
        }
    }
    ifs.close();
 
    for ( std::map<std::string, Point>::const_iterator i = arr.begin(); i != arr.end(); ++i )
        std::cout << i->first << ' ' << i->second.x << ' ' << i->second.y << std::endl;
 
    return 0;
}
Но у CheshireCat красивше, не спорю
fallti
0 / 0 / 0
Регистрация: 04.03.2010
Сообщений: 18
04.03.2010, 19:08  [ТС]     Функция считывания из файла для map #9
спасибо, тоже очень благодарен
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.03.2010, 19:26     Функция считывания из файла для map
Еще ссылки по теме:

C++ Универсальная функция считывания переменных из бинарного файла
C++ Есть ли в С++ функция для считывания информации с файла с подробной настройкой?
C++ Функция для считывания символа из файла в переменную wchar_t

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

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
04.03.2010, 19:26     Функция считывания из файла для map #10
Цитата Сообщение от CheshireCat Посмотреть сообщение
Тогда где-то так (не проверял!):
Тут, кстати, вот из этой темы подводный камень скрывается в плане организации цикла считывания из файла...
Yandex
Объявления
04.03.2010, 19:26     Функция считывания из файла для map
Ответ Создать тему
Опции темы

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