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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
TrueBit
95 / 95 / 12
Регистрация: 19.11.2012
Сообщений: 195
#1

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

20.11.2012, 22:06. Просмотров 716. Ответов 2
Метки нет (Все метки)

Недавно понадобилось использование ассоциативного массива 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;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2012, 22:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не могу разобраться с map(STL) (C++):

STL :: map - C++
Столкнулся с такой проблемой: Нужно вставить в отсортированную map-таблицу элемент. Использую: myMap.insert(myIterator,pair&lt;type1,...

STL map - C++
Вопрос:как мне узнать что не создавался map с заданым str? #include &lt;iostream&gt; #inlclude &lt;map&gt; #include &lt;string&gt; using namespace...

Map stl - C++
Не могу понять, почему не находит через h1.find(argv). когда argv == &quot;-o&quot; vs пишет &quot;itr = (0xcdcdcdcd &lt;Ошибка при чтении символов...

stl map - C++
где можно прочитать о stl map? подскажите книги..

Вопрос об map STL - C++
Как вивести map? list&lt;int&gt; l; for (int i=1; i&lt;=5; i++) l.push_back(i); map&lt;int,list&lt;int&gt;&gt; a; int d = 9; int f = 5; ...

STL. Map, vector. Строки - C++
Здравствуйте. Почти не знаком с STL. Имеется вектор строк. Нужно найти частоту использования каждой буквы. Я уже который...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
20.11.2012, 22:15 #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) Не делайте мап глобальным, лучше передавать его функции в качестве аргумента. Это вопрос стиля.
1
TrueBit
95 / 95 / 12
Регистрация: 19.11.2012
Сообщений: 195
20.11.2012, 22:36  [ТС] #3
Ага, спасибо, буду пробовать. В конечной реализации он размещен под меткой private: доступ через функции класса. Глобальное объявление я приводил для примера.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2012, 22:36
Привет! Вот еще темы с ответами:

Работа с библиотекой STL, контейнер map - C++
Ввожу с экрана имя и номер телефона несколько раз, но for_each почему-то выводит на экран только последнего введенного пользователя, а мне...

Примеры алгоритмов для STL map - C++
Помогите пожалуйста. Начал делать лабораторную работу. Суть задания: реализовать для map 5 алгоритмов sort, copy, none_of, find_if,...

STL(map). Где инициализировать массив? - C++
Для начала: не получалось данную тему назвать более логично, сайт не пропускал :-| Добрый день. Имеется: map&lt;int, string&gt;...

Stl стандартная библиотека шаблонов c++ map - C++
Доброго всем времени суток :) Помогите пожалуйста дописать прогу. Нужно добавить сортировку по фамилии (что бы выводились в алфавитном...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru