Создание массива списков

271
12 июня 2017, 22:31

Есть большой файл, в котором 2 столбца. В первом целые значения менятются от 1 до 360 (это индексы). Во втором рандомное целое число (значения).

Нужно организовать какую то структуру, чтобы на выходе получилось 360 объектов с набором значений из второго столбца в файле. Как я понял, решение - это массив списков?

Например:

2 10
120  20
359  53
2 15

Во второй список добавить 10 и 15, в 120-ый 20, в 359-ый 53 и т.д. Или подскажите другое решение задачи.

Answer 1

Ну в целом вы правы. Можно использовать 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 - текущее значение
}
READ ALSO
Калькулятор на с++ не работает [требует правки]

Калькулятор на с++ не работает [требует правки]

Совсем недавно начал изучать с++ , пока читал подумал, что уже могу сделать калькуляторНо что то пошло не так

372
Как проверить правильно ли введен рост в футах и дюймах?

Как проверить правильно ли введен рост в футах и дюймах?

Программа запрашивает рост в футах и дюймахНужно преобразовать рост в футах и дюймах в рост в дюймах (1 фут = 12 дюймов)

423
Существуют ли правила подключения include-файлов в С++? [требует правки]

Существуют ли правила подключения include-файлов в С++? [требует правки]

Написал проект, в котором используется много файлов, в каждом по несколько классов и они ссылаются друг на другаИ вот в какой-то момент возникла...

250
Does not name a type

Does not name a type

Есть вот такой код(работаю в Code Blocks):

348