无法编译归并排序树结构?

Can not compile merge sort tree structure?

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

在 c:\mingw\lib\gcc\mingw32.3.0\include\c++\bits\stl_algobase.h:71:0 包含的文件中, 来自 c:\mingw\lib\gcc\mingw32.3.0\include\c++\bits\char_traits.h:39, 从 c:\mingw\lib\gcc\mingw32.3.0\include\c++\ios:40, c:\mingw\lib\gcc\mingw32.3.0\include\c++\mingw32\bits\stdc++.h:52, 来自 C:\Users\Ayuu\Desktop\codes\test3.cc:1: c:\mingw\lib\gcc\mingw32.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.3.0\include\c++\bits\stl_algo.h:4751:14: 需要'_OutputIterator std::__merge(_InputIterator1, _InputIterator1, _InputIterator2, _InputIterator2, _OutputIterator, _Compare ) [with _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.3.0\include\c++\bits\stl_algo.h:4858:37:需要'_OIter std::merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare ) [with _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.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());

这应该有效。