c++ - 无法编译合并排序树结构?

标签 c++ class compiler-errors tree mergesort

I was trying to implement merge sort tree structure but whenever i try to merge child vector to parent vector i get compilation error . I am stuck here .


 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;
    }
};

enter image description here

在c:\ mingw \ lib \ gcc \ mingw32 \ 6.3.0 \ include \ c++ \ bits \ STL_algobase.h:71:0包含的文件中,
来自c:\ mingw \ lib \ gcc \ mingw32 \ 6.3.0 \ include \ c++ \ bits \ char_traits.h:39,
来自c:\ mingw \ lib \ gcc \ mingw32 \ 6.3.0 \ include \ c++ \ ios:40,
c:\ mingw \ lib \ gcc \ mingw32 \ 6.3.0 \ include \ c++ \ mingw32 \ bits \ stdc++。h:52,
来自C:\ Users \ Ayuu \ Desktop \ codes \ test3.cc:1:
c:\ mingw \ lib \ gcc \ mingw32 \ 6.3.0 \ include \ c++ \ bits \ predefined_ops.h:在'constexpr bool __gnu_cxx::__ ops::_ Iter_comp_iter <_Compare>::operator()(_ Iterator1,_Iterator2 )[with _Iterator1 = __gnu_cxx::__ normal_iterator>; _Iterator2 = __gnu_cxx::__ normal_iterator>; _Compare = __gnu_cxx::__ normal_iterator>]':
c:\ mingw \ lib \ gcc \ mingw32 \ 6.3.0 \ include \ c++ \ bits \ STL_algo.h:4751:14:从'_OutputIterator std::__ merge(_InputIterator1,_InputIterator1,_InputIterator2,_InputIterator2,_OutputIterator,_Compare)需要[使用_InputIterator1 = __gnu_cxx::__ normal_iterator>; _InputIterator2 = __gnu_cxx::__ normal_iterator>; _OutputIterator = __gnu_cxx::__ normal_iterator>; _Compare = __gnu_cxx::__ ops::_ Iter_comp_iter <__ gnu_cxx::__ normal_iterator>>]'
c:\ mingw \ lib \ gcc \ mingw32 \ 6.3.0 \ include \ c++ \ bits \ STL_algo.h:4858:37:需要'_OIter std::merge(_IIter1,_IIter1,_IIter2,_IIter2,_OIter,_Compare) [使用_IIter1 = __gnu_cxx::__ normal_iterator>; _IIter2 = __gnu_cxx::__ normal_iterator>; _OIter = __gnu_cxx::__ normal_iterator>; _Compare = __gnu_cxx::__ normal_iterator>]'
C:\ Users \ Ayuu \ Desktop \ codes \ test3.cc:43:38:从此处开始
c:\ mingw \ lib \ gcc \ mingw32 \ 6.3.0 \ include \ c++ \ bits \ predefined_ops.h:123:18:错误:对'(__gnu_cxx::__ normal_iterator>)(int&,int&)'的调用不匹配
{return bool(_M_comp(* __ it1,* __ it2)); }

最佳答案

看这行,它期望一个迭代器,您给了2
错误:调用'(__gnu_cxx::__ normal_iterator>)(int&,int&)'不匹配{return bool(_M_comp(* __ it1,* __ it2)); }

从合并函数中删除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());

这应该工作。

关于c++ - 无法编译合并排序树结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61370949/

相关文章:

c++ - 包括多个编译单元中的模板代码,它会一直链接而不是内联吗?

Java - 使内部类能够修改外部类

.net - c++ fatal error c1083项目以前很好,现在怎么办?

swift - 您好,我收到两个 textFieldDidChange 错误(Swift)

c++ - 为什么内联声明不是不完整的类型?

c++ - 如何确定要为boost::stacktrace::safe_dump分配多少空间?

失败的构造和破坏之间的 C++ 代码重用

class - 由于开闭原则处理继承层次结构

python - 为什么许多 Python 内置/标准库函数实际上是类

syntax - D中的基本运算符重载(第2部分)