候选人需要6个参数,2个提供(合并排序的向量)

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

我正在尝试用C ++实现mergesort树,但是我收到了错误

note:   template argument deduction/substitution failed:
C:\Users\IT Services\Documents\mergetree.cpp:15:38: note:   candidate expects 6 arguments, 2 provided
   tree[k]=merge(tree[2*k],tree[2*k+1]);

这是代码:

#include <bits/stdc++.h>

using namespace std;

vector<vector<int>> tree;
int n;

void update (int k, vector<int> vect)
{
    k+=n;
    tree[k]=vect;

    for (k/=2;k>=1;k/=2)
    {
        tree[k]=merge(tree[2*k],tree[2*k+1]);
    }
}

vector<int> merge (vector<int> arr1, vector<int> arr2)
{
    int a1=arr1.size(), a2=arr2.size();
    vector<int> sortvect(a1+a2);

    int i=0,j=0,k=0;

    while (i<a1&&i<a2) sortvect[k++]=((arr1[i]<arr2[j])?arr1[i++]:arr2[j++]);
    while (i<a1) sortvect[k++]=arr1[i++];
    while (j<a2) sortvect[k++]=arr2[j++];

    return sortvect;
}

int main()
{
    cin>>n; tree.resize(2*n,{0});
    int a;

    for (int i=0;i<n;i++)
    {
        cin>>a;
        update(i,{a});
    }
}

显然,合并函数不需要6个参数。为什么编译器认为它呢?

[另外,请忽略编写代码的可怕方式。我正在为即将到来的比赛练习,目前还没有优先考虑清晰的编码惯例。

c++ function merge compiler-errors arguments
1个回答
1
投票

标准算法库中有一个std :: merge API(http://en.cppreference.com/w/cpp/algorithm/merge)。它的味道有6个参数。第15行的合并调用可能是其中一个函数的giong。

您可以通过检查错误描述后列出的候选项来确保这一点。

您应该在计划使用它的行之前转发声明您的合并方法。而不是using namespace std;,明确地解决范围,你想要使用std方法。在第15行,将merge调用为:: merge。如果您只是希望您的合并具有文件范围,则将其放在未命名的命名空间中。

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