当前位置: 首页 > 知识库问答 >
问题:

不能编译合并排序树结构?

孟俊发
2023-03-14

我试图实现合并排序树结构,但每当我试图将子向量合并到父向量时,就会出现编译错误。我被困在这里了。

 class merge_sort_tree {

    vector<int>input;
    vector<vector<int> >tr;
    int n;
public:

    merge_tree(vector<int >p) {
        n = p.size();
        input = p;
        tr.resize(5 * n);
    }

    void build(int root, int l, int r) {
        if (l == r)
        {
            tr[root] = {input[l]};
        }

        int m = l + (r - l) / 2;

        build(2 * root, l, m);
        build(2 * root + 1, m + 1, r);

       //temporary vector for merging child vectors 

        vector<int>tmp(tr[2 * root].size() + tr[2 * root + 1].size());  

       // merging child vector and storing result in tmp

        merge(tr[2 * root].begin(), tr[2 * root].end(),
              tr[2 * root + 1].begin(), tr[2 * root + 1].end(),
              tmp.begin(), tmp.end() );

         tr[root]=tmp;
    }
};

在包含的文件中,从c:\ming w\lib\gcc\ming w32\6.3.0\包括\c\bit\stl_algobase. h: 71:0,从c:\ming w\lib\gcc\ming w32\6.3.0\包括\c\bit\char_traits. h: 39,从c:\ming w\lib\gcc\ming w32\6.3.0\包括\c\ios: 40,c:\ming w\lib\gcc\ming w32\6.3.0\包括\c\ming w32\bit\stdc. h: 52,从c:\用户\Ayuu\桌面\代码\test3.cc: 1: c:\ming w\lib\gcc\ming w32\6.3.0\包括\c\bit\predefined_ops. h:在'consenr bool__gnu_cxx的实例化中::__ops::_Iter_comp_iter

共有1个答案

农飞星
2023-03-14

看这一行,它需要一个迭代器,您给出了两个错误:对“(_gnu_cxx::_normal_迭代器)的调用不匹配

移除tmp。从合并函数中删除end()。它需要5个参数,而不是6个。

    merge(tr[2 * root].begin(), tr[2 * root].end(),
          tr[2 * root + 1].begin(), tr[2 * root + 1].end(),
          tmp.begin());

这应该行得通。

 类似资料:
  • 事情是这样的。我在做leetcode 164最大间隙。最佳解决方案是桶排序。 这让我对排序问题有了更多的思考。假设我们有如下列表: 2、5、19、444、-14、89、16、77 我认为,我们可以用两个不同的范围来排列这些数字,(min, mid)(mid, max)和mid-应该是min(max-min)/2; 因此我们得到了(-14215)(216444) 我们将min设置为最左侧,max设置

  • 我很难理解递归合并排序算法是如何工作的,我理解它在理论上是如何工作的:如果一个数组中有多个元素,找到它的中间,将数组分成两个较小的子数组,依此类推,直到你有两个1个元素的数组,根据定义已经排序(基本情况),然后你可以使用合并算法合并它们,然后你爬上树,依此类推。 我试着用python实现它,用一些print语句一步一步地执行,它是可行的,但我真的不明白为什么它会这样工作。我将向你描述我的错误逻辑:

  • 双向合并排序与递归合并排序有何不同? 假设在合并排序中有5个数字需要排序8,9,1,6,4,我们按如下步骤1进行划分:{8,9,1}{6,4} 步骤2:{8,9}{1}{6}{4} 步骤3:{8}{9}{1}{6}{4} 现在合并 步骤4:{8,9}{1}{4,6} 步骤5:{1,8,9}{4,6} 第六步:{1,4,6,8,9} 但在双向合并排序中,我们将数组分为两个元素(但根据维基百科,在合并

  • 我有一个结构数组 我希望合并并按升序排序数组。然而,当我执行合并时,没有任何变化。这是我用来创建struct数组的代码,以及MergeSort的函数调用。最大用户数是我从二叉树中转换节点数得到的整数,它应该是数组的最大数量。 任何提示或提示都将不胜感激! 编辑:当我尝试编写一些printf语句时,我注意到这些值是负数。但是存储在结构中的值是正数。这个错误的原因是什么?

  • 本文向大家介绍合并排序,包括了合并排序的使用技巧和注意事项,需要的朋友参考一下 合并排序技术基于分而治之。我们将整个数据集分成较小的部分,然后按排序顺序将它们合并成较大的部分。在最坏情况下它也非常有效,因为该算法在最坏情况下的时间复杂度也较低。 合并排序技术的复杂性 时间复杂度: 所有情况下为O(n log n) 空间复杂度:  O(n) 输入输出 算法 合并(数组,左,中,右) 输入- 数据集数

  • 问题内容: 给定两个排序数组,如下所示: 我希望输出为: 要么: 我知道我可以执行以下操作: 我只是想知道是否有一种更快的方法,因为我要处理的数组具有数百万个元素。 任何想法都欢迎。谢谢 问题答案: 由于您使用numpy,因此我怀疑bisec根本不会对您有所帮助。因此,我建议您做两件事: 千万 不能 使用,使用方法,而不是这种种取代阵列,避免了复制。 必须使用没有到位的。因此,不要手动使用逻辑。I