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

问题描述 投票:0回答:1

我试图实现合并排序树结构,但每当我试图合并子向量到父向量时,我得到编译错误。我被卡在这里。

 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:mingwlibgcc/mingw32/6.3.0/includec++/bits/stl_algobase.h:71:0,从c:mingwlibgcc/mingw32/6.3.0/includec++/bits/char_traits.h:39,从c:mingwlibgcc/mingw32/6.3. 0includec++/ios:40,c:mingw/libgccmingw32/6.3.0includec++/mingw32bits/stdc++.h:52,从C:Users/Ayuu/Desktop/codes/test3.cc:1:c:mingw/libgccmingw32/6.3.0includec++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\gccmingw32\6. 3.0/include/c++/bits/stl_algo. h:4751:14: required from '_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\libg\ccmingw32\6. 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/Ayu/Desktop/codes/test3. cc:43:38: required from herec:mingw/lib/gcc/mingw32/6.3.0/include/c++bits/predefined_ops.h:123:18: error: no match for call to '(__gnu_cxx::__normal_iterator >) (int&, int&)' { return bool(_M_comp(*__it1, *__it2)); }。

c++ class compiler-errors tree mergesort
1个回答
1
投票

看这一行,它期望有一个迭代器,你给了 2error: no match for call to '(__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());

这应该是可行的。

© www.soinside.com 2019 - 2024. All rights reserved.