Как вы думаете, что делает этот конструктор? Добавление одного значения в начале карты?
Инициализирует карту так, что map[x] == v
для любого x
. Карта связывает интервалы со значениями, храня внутреннюю карту нормалей с ключом в начале каждого интервала; он инициализируется так, чтобы весь диапазон типа ключа соответствовал начальному значению.
Я вижу в соответствующем ключе только адрес в качестве значения после инициализации в main. Что случилось? Оператор [] должен получить значения для определенного ключа. Однако я не могу использовать его, чтобы получить элементы карты в выводе. Любой намек?
Понятия не имею, о чем ты там спрашиваешь. Если вы попытаетесь, например, cout << Map1[42] << '\n';
, то ваша программа должна вывести 10
, поскольку это начальное значение, присвоенное всему диапазону целых чисел.
Учтите также, что это должна быть функция, которая вставляет значения в карту.
Поскольку внутренняя карта является общедоступной, вы можете добавить новый интервал на карту с помощью
Map1.my_map.insert(std::make_pair(interval_start, value));
Возможно, было бы более вежливо сделать my_map
приватным и предоставить функцию insert()
для этого. Вы могли бы также добавить неконстантную перегрузку operator[]
, которая вставляет новый диапазон и возвращает ссылку на его значение, что-то вроде
V & operator[](K const & key) {
V const & old_value = (--my_map.upper_bound(key))->second;
return *my_map.insert(std::make_pair(key, old_value)).first;
}
хотя это может быть не самой удачной идеей, так как вам следует быть осторожным, чтобы случайно не вставить много диапазонов, когда вы хотите только прочитать значения.
Моя проблема в том, как перебрать карту, чтобы получить все ее элементы и распечатать их в основном. Он показывает мне адрес со значением инициализации объекта.
Помня, что итератор на карте относится к паре ключ / значение (типа std::pair<K,V>
), вы должны иметь возможность итерацию на карте следующим образом:
for (auto it = Map1.begin(); it != Map1.end(); ++it) {
std::cout << it->first << " maps to " << it->second << '\n';
}
(в C ++ 03 вам нужно написать template_map<int,int>::const_iterator
вместо auto
).