C++ 中map中是数怎么经过for循环提取出来,
例如map<int,int>mp;map<int,int>::iteratoriter;intmain(){mp.clear();intn,t;while(~scanf(...
例如 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<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;
} 展开
5个回答
展开全部
for(iter=mp.begin();iter<????;iter++)//要取前K个数,这个限制条件改怎么写?
cout<<(iter->first)<<" ";
可以改成
iter=mp.begin();
int k;
while(k)
{
cout<<(iter->first)<<" ";
k--;
iter++;
}
你的map是用insert()进行插入的 你写的我觉得有问题
欢迎追问
cout<<(iter->first)<<" ";
可以改成
iter=mp.begin();
int k;
while(k)
{
cout<<(iter->first)<<" ";
k--;
iter++;
}
你的map是用insert()进行插入的 你写的我觉得有问题
欢迎追问
更多追问追答
追问
我之所以不另外定义一个变量来记录数据个数,是想万一我不是从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;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
定义一个迭代器(以int&int的map为例):map<int,int>::iterator mapi;
然后遍历map就可以写成
for(mapi=map.begin;mapi!=map.end;mapi++)
{
int a=mapi->first;
int b=mapi->second;
}
然后遍历map就可以写成
for(mapi=map.begin;mapi!=map.end;mapi++)
{
int a=mapi->first;
int b=mapi->second;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
CMap<int,int,CPoint,CPoint> myMap;
int i;
myMap.InitHashTable( 257 );
// Add 10 elements to the map.
for (i=0;i < 200;i++)
myMap[i] = CPoint(i, i);
// Remove the elements with even key values.
CPoint pt;
for (i=0; myMap.Lookup( i, pt ) ;i+=2)
{
myMap.RemoveKey( i );
}
#ifdef _DEBUG
ASSERT(myMap.GetCount() == 100);
afxDump.SetDepth( 1 );
afxDump << "myMap: " << &myMap << "\n";
#endif
int i;
myMap.InitHashTable( 257 );
// Add 10 elements to the map.
for (i=0;i < 200;i++)
myMap[i] = CPoint(i, i);
// Remove the elements with even key values.
CPoint pt;
for (i=0; myMap.Lookup( i, pt ) ;i+=2)
{
myMap.RemoveKey( i );
}
#ifdef _DEBUG
ASSERT(myMap.GetCount() == 100);
afxDump.SetDepth( 1 );
afxDump << "myMap: " << &myMap << "\n";
#endif
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没理解你取前几个数是什么意思,是取出前几个pair还是取出每个pair的第一个元素还是每个pair的第二个元素?
追问
就是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;
}
看看你是不是这个意思
不好意思刚才写的有点错
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
定义一个 int step = 0;
每次循环+1;
if (step >= k)
break;
每次循环+1;
if (step >= k)
break;
追问
这个我知道,我想知道的是for循环中有没有一个写法,比如vector中,我定义vectorvec;
提取前K个数就可以写成for(iter=vec.begin();iter<vec.begin+K;iter++) 但map不能这么写,它是否有其他写法?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询