免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4821 | 回复: 4
打印 上一主题 下一主题

如何设置hash_map的bucket数量 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-30 04:31 |只看该作者 |倒序浏览
sgi的hash_map提供了hash_map(size_t n)来提供建立一个bucket数量不小于n的空的hash_map对象。一般buket数量至少为53。我写了如下的code。

#include <iosream>
#include <ext/hash_map>
using namespace std;
using namespace __gnu_cxx;

class Table {
    public:
        Table();
        hash_map< int, int > tbl;
};

int main() {
    Table a;
    cout << a.tbl.bucket_count() << endl;
    return 0;
}

运行结果显示Table对象的缺省bucket数量是193。为节省空间,我需要将它改成53甚至更低, 如何实现啊?
我尝试将上面的class定义改为如下
class Table {
    public:
        Table();
        hash_map< int, int > tbl(0);
};
但编译时出现如下错误:
error: expected identifier before numeric constant
error: expected ',' or '...' before numeric constant

[ 本帖最后由 yacare 于 2007-7-30 04:35 编辑 ]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2007-07-30 09:37 |只看该作者
找到stl_hash_map.h文件,
搜索100,
把它改成比53小的数字即可。

论坛徽章:
0
3 [报告]
发表于 2007-07-30 10:09 |只看该作者
能否直接在code里设置啊?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2007-07-30 10:43 |只看该作者
原帖由 yacare 于 2007-7-30 10:09 发表
能否直接在code里设置啊?

不能,
你能不能看看人家的实现呢?
光自己猜测是不行的。

论坛徽章:
0
5 [报告]
发表于 2007-07-30 10:55 |只看该作者
之所以不想在改库文件是因为这code可能会在不同的机器或平台编译。每次在不同的机器编译都需要改这个文件不大现实。而且,其它类在使用hash_map也许需要不同的初始bucket数量。
sgi的code看的实在是头大。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP