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 \ 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/