不用迭代器,map有函数可以实现这样的功能吗?

ithiker 2010-11-10 12:38:08
不用迭代器,map有函数可以实现下面这样的功能吗?

建立一个map<double,string> word;word中含有若干个键值对,当知道某个键时,我能不能立刻知道该键值对是第几对?
例如word为:
0.1 a
0.2 b
0.3 c
0.4 d
当给出0.3时,我立刻知道该键对应的是第3对
...全文
246 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ithiker 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 qq120848369 的回复:]
C/C++ code
#include <map>
#include <string>
#include <iostream>
using namespace std;

int main()
{
typedef map<double,string>Map;
Map a;
a.insert( Map::value_type(0.1,"a") );
……
[/Quote]
这个只需加1就是了

谢谢各位
qq120848369 2010-11-10
  • 打赏
  • 举报
回复
Lz需要明确一个概念,你只能获取到第n大键的那个n,不是你第n个插入的那个n,因为map是平衡二叉树,它自动按键值排序的,利用迭代器遍历也是按键值从小到大遍历的,在这个基础上,我给的代码才是你想要的.


楼上几个的回答有的没看清你的问题,无须深究.
ithiker 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 qq120848369 的回复:]
C/C++ code
#include <map>
#include <string>
#include <iostream>
using namespace std;

int main()
{
typedef map<double,string>Map;
Map a;
a.insert( Map::value_type(0.1,"a") );
……
[/Quote]
恩,谢谢,我要的就是这个
ithiker 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jixingzhong 的回复:]
有序数值,可以直接作为[]操作符参数获取value,且此key即为索引计数
[/Quote]
没太明白
我想做的是知道键能否得到自然序数,就如四楼说的那样
qq120848369 2010-11-10
  • 打赏
  • 举报
回复
#include <map>
#include <string>
#include <iostream>
using namespace std;

int main()
{
typedef map<double,string>Map;
Map a;
a.insert( Map::value_type(0.1,"a") );
a.insert( Map::value_type(0.2,"b") );
a.insert( Map::value_type(0.3,"c") );
a.insert( Map::value_type(0.4,"d") );
iterator_traits<Map::iterator>::difference_type dist=distance(a.begin(),a.find(0.3) );
cout<<dist<<endl;
return 0;
}


distance只是简化你的工作量而已,其实现根据迭代器类型,选择直接做迭代器的差运算或者迭代器递增计数.
wufei80 2010-11-10
  • 打赏
  • 举报
回复
我和3楼的意见一致,直接根据序数值索引就可以。
dingshaofengbinbin 2010-11-10
  • 打赏
  • 举报
回复
你再维护一个map专门干这个事的不就行了
wokonglinglude 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jixingzhong 的回复:]
有序数值,可以直接作为[]操作符参数获取value,且此key即为索引计数
[/Quote]他要的是自然序列数,下标会将新的key插入。。。
jixingzhong 2010-11-10
  • 打赏
  • 举报
回复
有序数值,可以直接作为[]操作符参数获取value,且此key即为索引计数
wokonglinglude 2010-11-10
  • 打赏
  • 举报
回复
(1)变一下数据类型map<double,pair<int,string> >; 键 顺序-值。
(2)用word.find(K)但是返回的是迭代器,估计不符合你的要求。
(3)根据关联容器的数据结构,推测是没有。
科技完美生活 2010-11-10
  • 打赏
  • 举报
回复
你的键值可不可以当做下标啊,
1 a
2 b
3 c
4 d

当给出3时,立刻知道该键对应的是第3对
哈哈

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧