例如 map<int,int> mp;
map<int,int>::iterator iter;
int main()
{
mp.clear();
int n,t;
while(~scanf("%d",&n))
{
for(int i=0;i<n;i++)
{
scanf("%d",&t);mp[t]++;
}
for(iter=mp.begin();iter<????;iter++)//要取前K个数,这个限制条件改怎么写?
cout<<(iter->first)<<" ";
}
return 0;
}
我之所以不另外定义一个变量来记录数据个数,是想万一我不是从map中的第一个数开始,而是想找出第3到第5个数,这样我是需要先iter=mp.begin()循环到第3个,再开始输出,没有直接可以从第三个开始输出,就比如说数组,我可以for(int i=3;i<=5;i++)cout<<a[i]<<endl;但是在map中我改怎么写呢
追答int i=0;
for(iter=mp.begin(),int i=0;iterfirst)<<" ";//取前K个数
else
break;
}
iter<mp.end()不能这么写吧,是iter!=mp.end()吧?还有好像还是没有说明怎么取出第k1到k2的数,不过还是谢谢啦
追答for(iter=mp.begin(),int i=0;iter!=mp.end();iter++,i++)
{
if(ifirst)<<" ";//取前K个数;
}
//不你的问题 欢迎追问
比如我又10000个数我要算出9998到10000这区间的数,按上面的for循环还是要循环10000次,复杂度还是比较高,没有其他的方法了吗?
追答map是二叉树型存储的结构 是关连型容器
二叉树搜索很快的 而且只能从头开始遍历树
欢迎追问
就是map中有10个数0,1,2,3,4,5,6,7,8,9,mp[0]=2,mp[1]=3。。。。现在我不管0,1,2.。。这些数具体的个数,我只要求出map中前5项的“值”,怎么经过for循环提取出来
追答int i = 5;
map a;
for(map::iterator imap = a.begin();
i != 6; ++i)
{
coutfirstsecond;
++imap;
}
看看你是不是这个意思
不好意思刚才写的有点错
这个我知道,我想知道的是for循环中有没有一个写法,比如vector中,我定义vectorvec;
提取前K个数就可以写成for(iter=vec.begin();iter<vec.begin+K;iter++) 但map不能这么写,它是否有其他写法?