dimanche 16 août 2020

Can someone please explain to me the following errors(mostly vector related) mentioned by the compiler(i am compiling a c++ program)?

Question i was trying to solve-

" You are given a rooted tree that contains N nodes. Each node contains a lowercase alphabet. You are required to answer Q queries of type u,c, where u is an integer and c is a lowercase alphabet. The count of nodes in the subtree of the node u containing c is considered as the answer of all the queries. "

#include<bits/stdc++.h>
using namespace std;

void count(vector<vector<int>> *v,int par,string s,int arr[][26])
{
    if(v[par].size()==0)
    {
        arr[par][s[par-1]-'a']++;
        return;
    }
        
    arr[par][s[par-1]-'a']++;
    for(int i=0;i<v[par].size();i++)
    {
        count(&v,v[par][i],s,&arr);
        for(int j=0;j<26;j++)
        {
            arr[par][j]=arr[v[par][i]][j]+arr[par][j];
        }
    }
}
int main()
{
    int n,q,par,child,arr[100010][26]={};
    char alphabet;
    cin>>n>>q;
    string s;
    cin>>s;
    vector<vector<int>> v={};
    while(n--)
    {
        cin>>par>>child;
        v[par].push_back(child);
    }
    count(&v,1,s,&arr);
    while(q--)
    {
        cin>>par>>alphabet;
        cout<<arr[par][alphabet-'a']<<"\n";
    }
}

and now the errors

In function ‘void count(std::vector<std::vector<int> >*, int, std::__cxx11::string, int (*)[26])’:
13:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]


15:28: error: no matching function for call to ‘count(std::vector<std::vector<int> >**, __gnu_cxx::__alloc_traits<std::allocator<std::vector<int> > >::value_type&, std::__cxx11::string&, int (**)[26])’


4:6: note: candidate: void count(std::vector<std::vector<int> >*, int, std::__cxx11::string, int (*)[26])


4:6: note:   no known conversion for argument 1 from ‘std::vector<std::vector<int> >**’ to ‘std::vector<std::vector<int> >*’
62:0,
64,
1:
3959:5: note: candidate: template<class _IIter, class _Tp> typename std::iterator_traits<_Iterator>::difference_type std::count(_IIter, _IIter, const _Tp&)


3959:5: note:   template argument deduction/substitution failed:
15:28: note:   deduced conflicting types for parameter ‘_IIter’ (‘std::vector<std::vector<int> >**’ and ‘std::vector<int>’)


18:19: error: no match for ‘operator[]’ (operand types are ‘int (*)[26]’ and ‘__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> > >::value_type {aka std::vector<int>}’)


 In function ‘int main()’:
35:19: error: no matching function for call to ‘count(std::vector<std::vector<int> >*, int, std::__cxx11::string&, int (*)[100010][26])’


4:6: note: candidate: void count(std::vector<std::vector<int> >*, int, std::__cxx11::string, int (*)[26])


4:6: note:   no known conversion for argument 4 from ‘int (*)[100010][26]’ to ‘int (*)[26]’
62:0,
64,
1:
3959:5: note: candidate: template<class _IIter, class _Tp> typename std::iterator_traits<_Iterator>::difference_type std::count(_IIter, _IIter, const _Tp&)


3959:5: note:   template argument deduction/substitution failed:
35:19: note:   deduced conflicting types for parameter ‘_IIter’ (‘std::vector<std::vector<int> >*’ and ‘int’)


Aucun commentaire:

Enregistrer un commentaire