Я думаю, что основная проблема в том, что ваша программа не создает map
, который, как вы думаете, есть, и что ваша программа не отображает векторные элементы, которые, как вы думаете, есть.
ДляВ целях этого ответа я предполагаю, что идентификаторы ID1
и ID2
являются простыми целочисленными переменными или макросами, которые являются простыми целочисленными константами (и имеют значение больше 0, иначе программа по существу ничего не сделает).Если ID1
или ID2
являются чем-то более сложным, трудно рассуждать о том, что должна или может делать программа, без дополнительной информации о том, что представляют собой эти идентификаторы.
Давайте внимательно посмотрим, что происходит в каждом вложенном цикле.
В первом:
Maptest[ID1].push_back(ID2*0.01);
Используемая клавиша map
всегда одинакова, поскольку ID1
не изменяется.Таким образом, Maptest
содержит только один элемент со значением ключа ID1
и вектор, который добавляет элементы к нему при каждой итерации цикла.Кроме того, каждый элемент, добавляемый к вектору, имеет одно и то же значение: (ID2 * 0.01)
.
В частности, обратите внимание, что хотя вложенные циклы управляются переменными i
и j
, эти переменныене привыкайте к вызову push_back()
.Таким образом, после завершения первого вложенного цикла, Maptest
содержит одиночное отображение, в котором есть ключ ID1
и вектор с (ID1 * ID2)
элементами.Каждый элемент этого вектора имеет значение (ID2 * 0.01)
.
Во втором вложенном цикле вы всегда находите один и тот же элемент в Maptest
- тот, у которого есть ключ ID1
(что происходит сбыть единственным предметом в map
).Часть vector<double>
этого отображения имеет массив с элементами (ID1 * ID2)
, каждый из которых имеет одинаковое значение.Цикл их форматирует элемент с индексом ID2
в testString
.Всегда один и тот же элемент из одного и того же вектора.Не то чтобы действительно имеет значение, какой элемент отформатирован в строку, поскольку каждый элемент вектора имеет одинаковое значение.