savostin
@savostin
Еще один программист

Как в операторе [] правильно вернуть указатель на внутренний vector/map?

Даже стыдно спрашивать. Хочется простого:
MyMap my;
my["one"] = 1;
my["second"] = 2;
int res = my["one"];

Вроде бы ничего сложного:
class MyMap
{
private:
   map<const char*, int> data;
public:
   MyMap() {}
   ~MyMap() {}
   int & operator [] (const char* name) { return data[name]; }
};

Но в результате получается странное:
my.count() : 3

one : 1
two : 2
one : 0

res : 0

Где этот чёртов детсадовский косяк? И вообще WTF?
P.S. К сожалению C++98
  • Вопрос задан
  • 2383 просмотра
Решения вопроса 1
@Sumor
map это по сути словарик и он не допускает двух элементов с одним ключом. Если вы пытаетесь добавить значение с существующим ключом, то в вашем случае оно просто заменяется.
Возможно вам надо использовать set вместо map.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
risik
@risik
Программист
Странно. Код правильный. А чем компилируете? Я на gcc 4.6.3 с опцией -std=c++98 прогнал. все работает как ожидается.
Ответ написан
tsarevfs
@tsarevfs Куратор тега C++
C++ developer
Покажите код целиком, с выводом.
Ответ написан
Комментировать
@ilejn
А где у Вас при использовании
map<const char*, int>
хранятся ключи? Где под них память выделяется?

Если нигде (к примеру, Вы выходите за пределы функции), то
map<std::string, int> выглядит более здраво.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы