Есть большой файл, в котором 2 столбца. В первом целые значения менятются от 1 до 360 (это индексы). Во втором рандомное целое число (значения).
Нужно организовать какую то структуру, чтобы на выходе получилось 360 объектов с набором значений из второго столбца в файле. Как я понял, решение - это массив списков?
Например:
2 10
120 20
359 53
2 15
Во второй список добавить 10 и 15, в 120-ый 20, в 359-ый 53 и т.д. Или подскажите другое решение задачи.
Ну в целом вы правы. Можно использовать std::map
, в котором ключом будет значение в первом столбце, а значением — вектор значений из второго столбца.
Как-то так:
std::ifstream file("..."):
int first, second;
// собственно ваш вопрос
std::map<int,std::vector<int>> arr;
while (file >> first && file >> second) {
arr[first].push_back(second);
}
UPDATE
Можно еще использовать std::multimap
, правда там, как по мне, не очень удобно обращатся к отдельным элементам, но для полноты решения все же напишу:
std::multimap<int,int> arr;
while (file >> first && file >> second) {
arr[first].emplace(first, second);
}
А вот чтобы перебрать значения в ключе, придется пройтись по итератору:
auto range = arr.equal_range(key)
for (auto it = range.first; it != range.second; it++) {
// далее ваш код, в котором it->first это ключ, а it->second - текущее значение
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Совсем недавно начал изучать с++ , пока читал подумал, что уже могу сделать калькуляторНо что то пошло не так
Программа запрашивает рост в футах и дюймахНужно преобразовать рост в футах и дюймах в рост в дюймах (1 фут = 12 дюймов)
Написал проект, в котором используется много файлов, в каждом по несколько классов и они ссылаются друг на другаИ вот в какой-то момент возникла...