根据两个字段查询的问题

中级伴读 2010-11-30 01:33:47
我有这样一组数

X Y 值 说明
30,30,124,"nihao"
30,31,125,"hehe"
30,32,126,"haha"
31,30,124,"heihei"
31,31,127,"hehe"
32,30,124,"hoho"
32,31,112,"hh"
……

就是前面两个数字共同组成一条唯一的记录(类似于联合主键)
该如何组织排序,比如我要找到X=31,Y=31的那条记录,怎么样最快,谢谢
不知道说明白没有,呵呵
...全文
129 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
gules 2010-12-01
  • 打赏
  • 举报
回复
1000万条记录,要么hash,要么数据库。
至善者善之敌 2010-12-01
  • 打赏
  • 举报
回复
说一下自己的看法,因为是千万级的查找,所以不要局限于现有的查找模式,对所有符合XY的情况HASH查找,当然这算法可能也只是个折中的办法,楼主自己事情况而定吧,还有可以拆解查询和双向查询综合起来,要活学活用
qq120848369 2010-11-30
  • 打赏
  • 举报
回复
数据库.
libinfei8848 2010-11-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ri_aje 的回复:]
用 std::map 倒是可以,像这样 std::map<std::pair<size_t,size_t>, ... >,不过标准规定 std::map 只需要达到对数级的时间复杂度,一般都是利用平衡二叉树实现的,1000万话,构造和查找可能都不太理想。楼主能用散列表吗?这样插入和查询的都是渐进常数时间。另外楼主可以用数据库吗?
[/Quote]

map也行,注意自己写排序规则函数,查找规则函数
simulationz 2010-11-30
  • 打赏
  • 举报
回复
1000万条记录用HASH表,这个表太大了吧。
boxban 2010-11-30
  • 打赏
  • 举报
回复
支持6楼,用HASH表吧。关键是根据X,Y的规律写一个好的HashFunction
中级伴读 2010-11-30
  • 打赏
  • 举报
回复
插入应该可以不考虑,一开始就初始化好,主要是查找。
呵呵,其实是可以用数据库的,但是我查找的频率很高,我预计每秒会查找500次左右,所以不知道怎么做能够实现这样的效率
ri_aje 2010-11-30
  • 打赏
  • 举报
回复
用 std::map 倒是可以,像这样 std::map<std::pair<size_t,size_t>, ... >,不过标准规定 std::map 只需要达到对数级的时间复杂度,一般都是利用平衡二叉树实现的,1000万话,构造和查找可能都不太理想。楼主能用散列表吗?这样插入和查询的都是渐进常数时间。另外楼主可以用数据库吗?
中级伴读 2010-11-30
  • 打赏
  • 举报
回复
另外,貌似map中pair不是这个样子的吧
中级伴读 2010-11-30
  • 打赏
  • 举报
回复
长度肯定不一定一样,只能确定的是,由X和Y组成一条唯一的记录
pady_pady 2010-11-30
  • 打赏
  • 举报
回复
外部排序
如果每行的长度一样长就非常容易。
中级伴读 2010-11-30
  • 打赏
  • 举报
回复
谢谢楼上,补充一下,约1000万条记录
xy_zhang 2010-11-30
  • 打赏
  • 举报
回复
用map可以吗?前面的X和Y组成一个pair,这个pair就是map的键值。

64,648

社区成员

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

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