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

Не могу разобраться с map(STL) - C++

Восстановить пароль Регистрация
 
TrueBit
 Аватар для TrueBit
95 / 95 / 12
Регистрация: 19.11.2012
Сообщений: 195
20.11.2012, 22:06     Не могу разобраться с map(STL) #1
Недавно понадобилось использование ассоциативного массива map(STL), дабы сократить код программы. Но возникли сложности. В кратце в программе несколько структур, функции и операции с файлами. При использовании map в структурах и функциях получаются некорректные результаты. При этом аналогичный код написаный в main работает без ошибок. В чем может быть ошибка? Как заставить работать map в структурах и функциях?. Вот 2 примера(рабочий и нерабочий):

рабочий:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//#include "main.h"
#include <iostream>
#include <map>
 
using namespace std;
 
int main() {
    map<char*,int> vars;
    map<char*,int>::const_iterator ip;
    char data[]="hello2";
    vars["hello1"]=2;
    vars[data]=4;
 
    for( ip = vars.begin(); ip != vars.end() ; ++ip ) {
        cout << ip->first << " = " << ip->second << endl;
    }
    getchar();
    return 0;
}
нерабочий:
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
//#include "main.h"
#include <iostream>
#include <map>
 
using namespace std;
 
map<char*,int> vars;
 
void fill() {
    char data[]="hello2";
    vars["hello1"]=2;
    vars[data]=4;
}
 
void print() {
    map<char*,int>::const_iterator ip;
    for( ip = vars.begin(); ip != vars.end() ; ++ip ) {
        cout << ip->first << " = " << ip->second << endl;
    }
}
 
int main() {
 
    fill();
    print();
 
    getchar();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2012, 22:06     Не могу разобраться с map(STL)
Посмотрите здесь:

C++ Вопрос об map STL
C++ Map STL - максимальный объем памяти
STL :: map C++
stl map C++
C++ Map stl
STL map C++
STL(map). Где инициализировать массив? C++
C++ STL. Map, vector. Строки

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
20.11.2012, 22:15     Не могу разобраться с map(STL) #2
C++
1
2
3
4
5
6
7
8
void fill() {
    char data[]="hello2";//локальная переменная
    vars["hello1"]=2;
    vars[data]=4;
    //уничтожение локальной переменной(очищение памяти) перед выходом из функции
    //в vars теперь хранится указатель на очищенную память, в которой может быть все, 
    //что угодно, в данном случае мусор
}
Советы:
1) Используйте string вместо char*. В данном случае это полностью решит проблему.
2) Не делайте мап глобальным, лучше передавать его функции в качестве аргумента. Это вопрос стиля.
TrueBit
 Аватар для TrueBit
95 / 95 / 12
Регистрация: 19.11.2012
Сообщений: 195
20.11.2012, 22:36  [ТС]     Не могу разобраться с map(STL) #3
Ага, спасибо, буду пробовать. В конечной реализации он размещен под меткой private: доступ через функции класса. Глобальное объявление я приводил для примера.
Yandex
Объявления
20.11.2012, 22:36     Не могу разобраться с map(STL)
Ответ Создать тему
Опции темы

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