为什么迭代器不识别被调用函数中多重集的数据类型?
Why isn't the iterator not identifying the datatype of the multi-set in the called function?
我正在尝试找到解决此问题的优化方法-
https://www.codechef.com/KJCS2019/problems/TSHACK
int findanswer(int k,const multiset<pair<int,int> >&a2)
{
int freq=0;
while(k>0)
{
multiset<pair<int,int> >::iterator itt=a2.end();
k-=itt.second;
a2.erase(itt);
++freq;
}
return freq;
}
int main()
{
cin>>n>>q;
map<int,int>a;
multiset<pair<int,int> > a2;
for(int i=0;i<n;i++)
{
int b;
cin>>b;
++a[b];
}
for(auto it:a)
a2.insert(make_pair(it.second,it.first));
while(q--)
{
int k;
cin>>k;
int ans=findanswer(k,a2);
cout<<ans<<endl;
}
}
错误信息:
prog.cpp: In function 'int findanswer(int, const std::multiset<std::pair<int, int> >&)':
prog.cpp:18:16: error: 'std::multiset<std::pair<int, int> >::iterator {aka struct std::_Rb_tree_const_iterator<std::pair<int, int> >}' has no member named 'second'
k-=itt.second;
^
prog.cpp:19:21: error: passing 'const std::multiset<std::pair<int, int> >' as 'this' argument discards qualifiers [-fpermissive]
a2.erase(itt);
^
正如我之前所说,我想知道被调用函数中的迭代器不识别多重集数据类型的原因。
第一个问题:
您想访问迭代器指向的数据而不是迭代器本身。所以你只需更换:
k-=itt->second;
下一题:
int findanswer(int k,const multiset<pair<int,int> >&a2)
这将您的参考 a2
定义为 const
。作为 const 你不能修改你的多重集。所以你必须在这里删除const
。
我正在尝试找到解决此问题的优化方法-
https://www.codechef.com/KJCS2019/problems/TSHACK
int findanswer(int k,const multiset<pair<int,int> >&a2)
{
int freq=0;
while(k>0)
{
multiset<pair<int,int> >::iterator itt=a2.end();
k-=itt.second;
a2.erase(itt);
++freq;
}
return freq;
}
int main()
{
cin>>n>>q;
map<int,int>a;
multiset<pair<int,int> > a2;
for(int i=0;i<n;i++)
{
int b;
cin>>b;
++a[b];
}
for(auto it:a)
a2.insert(make_pair(it.second,it.first));
while(q--)
{
int k;
cin>>k;
int ans=findanswer(k,a2);
cout<<ans<<endl;
}
}
错误信息:
prog.cpp: In function 'int findanswer(int, const std::multiset<std::pair<int, int> >&)':
prog.cpp:18:16: error: 'std::multiset<std::pair<int, int> >::iterator {aka struct std::_Rb_tree_const_iterator<std::pair<int, int> >}' has no member named 'second'
k-=itt.second;
^
prog.cpp:19:21: error: passing 'const std::multiset<std::pair<int, int> >' as 'this' argument discards qualifiers [-fpermissive]
a2.erase(itt);
^
正如我之前所说,我想知道被调用函数中的迭代器不识别多重集数据类型的原因。
第一个问题:
您想访问迭代器指向的数据而不是迭代器本身。所以你只需更换:
k-=itt->second;
下一题:
int findanswer(int k,const multiset<pair<int,int> >&a2)
这将您的参考 a2
定义为 const
。作为 const 你不能修改你的多重集。所以你必须在这里删除const
。