Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 合并排序k列表c++;_C++_Algorithm_List_Sorting_Mergesort - Fatal编程技术网

C++ 合并排序k列表c++;

C++ 合并排序k列表c++;,c++,algorithm,list,sorting,mergesort,C++,Algorithm,List,Sorting,Mergesort,我有一个随机生成的排序列表,我必须在堆的帮助下将大列表合并到一个最终列表中 std::list<int> randomList(int size) { std::list<int> list; for (int i = 0; i < size; i++) list.push_back(rand()); list.sort(); return list; } std::list<list<int>&g

我有一个随机生成的排序列表,我必须在堆的帮助下将大列表合并到一个最终列表中

std::list<int> randomList(int size)
{
    std::list<int> list;
    for (int i = 0; i < size; i++)
        list.push_back(rand());
    list.sort();
    return list;
}

std::list<list<int>> generateListOfLists(int size, int elements)
{
    std::list<list<int>> bigList;
    std::list<int> aux;
    for (int i = 0; i < size; i++)
    {
        aux = randomList(elements);
        bigList.push_back(aux);
    }
    return bigList;
}
std::list randomList(整数大小)
{
std::列表;
对于(int i=0;i
我之所以使用列表是因为我必须这样做。有人能帮我想一想如何在这里实现合并排序吗


谢谢

为所有列表创建一个迭代器数组。从所有列表中创建一个最小元素堆

在进行合并时,堆应该始终包含每个列表中的一个元素。在主循环中,从堆中获取最小元素,确定它来自哪个列表,增加该列表的迭代器,并用相应列表中的下一个元素替换堆中的元素

要将列表索引附加到元素,请在堆中存储
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());
struct数据
{
int元素;
int列表;
};
std::向量堆;
...
std::pop_heap(heap.begin(),heap.end());
... // 数据位于数组的最后一个位置:heap.back()
std::push_heap(heap.begin(),heap.end());
您知道如何使用该软件吗?它们应该完成任务的第二部分,而不必从头开始编写堆函数。