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;
};
Проблема с использованием char* в качестве ключей для map.
Я понимаю, что тут косяк в том, что в качестве ключа и запоминаю не содержимой строки, а её адрес.
Как корректно реализовать использование char* в качестве ключа в map?
Код:
И вообще, почему бы std::string для этих целей не использовать?
В условиях задачи сказано, что можно использовать только STL, а когда пытаюсь использовать string, компилятор периодически поругивается на незнакомые функции (я так понимаю, они лезут из <string>, а не из <string.h>). К сожалению, время для задачи ограничено (и вот-вот кончится), и подробно разобраться в библиотеке не успеваю.
Цитата: 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));
#include <map>
std::map<std::string, int>MyMap;
MyMap.insert(pair<std::string, int>("blabla",100));