Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с использованием char* в качестве ключей для map.

65K
14 апреля 2011 года
Kroops
9 / / 25.03.2011
В программе в качестве ключей для map'a используются char*. Элементы в map добавляются внешней функцией (она, по сути генерирует ключи для каждого объекта и суёт их в массив). В результате, как только завершается работа функции, ключи удаляются и при обращении по ним к элементам map программа вылетает.

Я понимаю, что тут косяк в том, что в качестве ключа и запоминаю не содержимой строки, а её адрес.

Как корректно реализовать использование char* в качестве ключа в map?

Код:
struct ltstr {
    bool operator()(const char* s1, const char* s2) const {
        return strcmp(s1, s2) < 0;
    }
};

class Cell;
typedef map<const char*, Cell, ltstr> dict;

void ParseDictionary (dict& d, istream& in) {
    //бла-бла
        char code[20];
        d\[code\].Add(Word(text, atoi(frequency))); //вот тут всё нормально, каждому элементу присваивается корректный ключ, обратные слэши поставил, чтобы форум не реагировал на тег.
};

int main() {
    dict d;
    //бла-бла
    ParseDictionary(d, cin);
    //а вот тут уже всё плохо, ключи удаляются как локальные переменные и в d все ключи имеют вид "MMMMMMMMMMMM...MMM"
    return 0;
};
11
14 апреля 2011 года
oxotnik333
2.9K / / 03.08.2007
Создавай ключ не на стеке, а в куче, только потом удалить не забудь.
И вообще, почему бы std::string для этих целей не использовать?
65K
14 апреля 2011 года
Kroops
9 / / 25.03.2011
А можно пример использования кучи?
В условиях задачи сказано, что можно использовать только STL, а когда пытаюсь использовать string, компилятор периодически поругивается на незнакомые функции (я так понимаю, они лезут из <string>, а не из <string.h>). К сожалению, время для задачи ограничено (и вот-вот кончится), и подробно разобраться в библиотеке не успеваю.
11
15 апреля 2011 года
oxotnik333
2.9K / / 03.08.2007
Цитата: Kroops
А можно пример использования кучи?


 
Код:
char *code = new char[20];

Цитата: Kroops
В условиях задачи сказано, что можно использовать только STL, а когда пытаюсь использовать string, компилятор периодически поругивается на незнакомые функции (я так понимаю, они лезут из <string>, а не из <string.h>). К сожалению, время для задачи ограничено (и вот-вот кончится), и подробно разобраться в библиотеке не успеваю.



 
Код:
#include <string>
#include <map>

std::map<std::string, int>MyMap;
MyMap.insert(pair<std::string, int>("blabla",100));
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог