Топологическая сортировка DAG в C++; структура данных для хранения отсортированного списка?

Я реализовал топологическую сортировку ориентированного ациклического графа на C++, которая выводит топологически отсортированный список.

Я вижу некоторые реализации, в которых отсортированный список хранится в std::stack, а некоторые в std::vector. Я не уверен, какая или какая-либо другая структура данных будет наиболее подходящей для моего случая. По сути, мне просто нужно пройтись по этому отсортированному списку и извлечь элементы, хранящиеся сверху вниз. Список не изменяется в процессе извлечения.

Использование std::vector кажется пустой тратой времени, поскольку я буду перераспределять вектор каждый раз, когда в список добавляется новый элемент. Этот список может стать довольно большим.

Кажется, я не могу перебрать std::stack в соответствии с Как пройти через стек в C++?.

Есть ли другой вариант, который был бы более подходящим для того, что я хочу сделать?


person 24n8    schedule 08.12.2018    source источник
comment
Предварительно выделите место в vector с помощью reserve.   -  person Mike Borkland    schedule 08.12.2018
comment
ах, но как насчет ситуаций, когда я понятия не имею (или даже приблизительного представления), насколько большим должен быть вектор? Я работаю со списками, которые могут быть порядка миллиардов, но обычно это целые числа.   -  person 24n8    schedule 08.12.2018
comment
Но вы знаете, сколько узлов в вашей DAG? Потому что это размер, который вам нужен для списка.   -  person nemanja228    schedule 08.12.2018
comment
Нет, иногда я могу не знать. Поэтому я и задал предыдущий вопрос. В большинстве случаев я знаю, сколько узлов, поэтому я, очевидно, могу зарезервировать список с известным количеством узлов.   -  person 24n8    schedule 08.12.2018
comment
Если вам нужно пройти его один раз и по порядку от начала до конца, вы можете использовать очередь. Но я думаю, что вектор с точки зрения производительности — ваш лучший вариант, хотя он может показаться неинтуитивным. Этот обзор стандартных контейнеров в STL может помочь вам принять решение: cs.northwestern.edu/~riesbeck/programming/c++/stl-summary.html   -  person nemanja228    schedule 08.12.2018
comment
Спасибо. На самом деле я буду повторять это много раз.   -  person 24n8    schedule 08.12.2018