Создайте массив итераторов для всех ваших списков. Создайте кучу минимальных элементов из всех списков.
При объединении ваша куча всегда должна содержать ровно один элемент из каждого списка. В вашем основном цикле получите минимальный элемент из кучи, определите, из какого списка он получен, увеличьте итератор для этого списка и замените элемент в куче следующим элементом из соответствующего списка.
Toприкрепить индекс списка к элементу, хранить struct
s в вашей куче:
struct data
{
int element;
int list;
};
std::vector<data> heap;
...
std::pop_heap(heap.begin(), heap.end());
... // Your data is in the last position of the array: heap.back()
std::push_heap(heap.begin(), heap.end());