0 / 0 / 0
Регистрация: 04.03.2010
Сообщений: 18
1

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

04.03.2010, 17:28. Показов 3294. Ответов 9
Метки нет (Все метки)

в файле задана последовательность ключ-точка(map<string,MYPOINT>). Помогите, пожалуйста, написать функцию считывания из файла, а то везде есть функция только для записи.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.03.2010, 17:28
Ответы с готовыми решениями:

Функция для считывания символа из файла в переменную wchar_t
Вот такой вот в общем код. Какой функцией можно считывать посимвольно символы из файла в переменную...

Есть ли в С++ функция для считывания информации с файла с подробной настройкой?
Есть ли в С++ функция для считывания информации с файла с подробной настройкой?Мне нужно будет...

Функция считывания слов с текстового файла
Доброго времени суток!) Задача такова: Считать из текстового файла слова в массив (создать для...

Универсальная функция считывания переменных из бинарного файла
Подскажите, написал запись в бинарный файл переменных, не могу считать, точнее функция должна быть...

9
Эксперт С++
2924 / 1273 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
04.03.2010, 17:30 2
Приведи эту функцию. Функция считывания будет очень-очень похожей.
0
0 / 0 / 0
Регистрация: 04.03.2010
Сообщений: 18
04.03.2010, 17:32  [ТС] 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;
}
но при считывании с файла мы же должны использовать буфер, так?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
11707 / 7214 / 1710
Регистрация: 25.07.2009
Сообщений: 13,216
04.03.2010, 17:34 4
fallti, пример входных данных приведите...
0
0 / 0 / 0
Регистрация: 04.03.2010
Сообщений: 18
04.03.2010, 17:39  [ТС] 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;
    }   
};
0
Эксперт С++
2924 / 1273 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
04.03.2010, 18:24 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;
   }
}
1
0 / 0 / 0
Регистрация: 04.03.2010
Сообщений: 18
04.03.2010, 18:46  [ТС] 7
Спасибо, я даже и не думал, что можно на столько просто сделать...
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
11707 / 7214 / 1710
Регистрация: 25.07.2009
Сообщений: 13,216
04.03.2010, 18:52 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 красивше, не спорю
1
0 / 0 / 0
Регистрация: 04.03.2010
Сообщений: 18
04.03.2010, 19:08  [ТС] 9
спасибо, тоже очень благодарен
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
11707 / 7214 / 1710
Регистрация: 25.07.2009
Сообщений: 13,216
04.03.2010, 19:26 10
Цитата Сообщение от CheshireCat Посмотреть сообщение
Тогда где-то так (не проверял!):
Тут, кстати, вот из этой темы подводный камень скрывается в плане организации цикла считывания из файла...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.03.2010, 19:26
Помогаю со студенческими работами здесь

Функция seekq, вместо повторного считывания файла (txt)
Всем привет, ребят. Я тут новый и это мой первый пост :) И вопрос у меня вот какой.. Мне нужно...

Функция считывания данных из файла: прошу совет по оптимизации кода
Код работает, но изящным его назвать очень тяжело. Прошу советов по сокращению и оптимизации...

Функция для считывания строки
Требуется написать функция для считывания строки, используя динамическое выделения памяти? Как это...

Функция для считывания нажатых клавиш.
Подскажите какую нибудь функцию которая бы считывала все нажатия клавиш? Например чтоб запустить...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru