Есть большой файл, в котором 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 - текущее значение
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей