问题Berkeley DB和C ++
-
21-09-2019 - |
题
我试图编写使用的Berkeley DB存储一个简单的C ++程序。数据库的密钥的类型time_t
和数据是integer
。
我需要采取两个相邻数据之间的差异在两个关键之间。我打开游标与标志DB_SET_RANGE然后我使用DB_NEXT进行迭代。
我的问题是,光标返回未排序的数据。有没有指定光标自定义分类器功能的方法是什么?
解决方案
一些为什么您可能想提供一个自定义排序功能的原因是:
您使用的是小端系统(例如x86),并且使用整数作为数据库的密钥。 Berkeley DB的存储密钥为字节字符串和little-endian整数不排序以及当作为字节串观看。有几种解决这个问题,一个是提供一个自定义的比较函数。请参见 http://www.oracle.com /technology/documentation/berkeley-db/db/ref/am_misc/faq.html 获得更多的信息。
您使用DB-> set_bt_compare设置一个B树的键比较函数()。
例如,一个用于排序整数在数据库中的键的示例例程是:
int
compare_int(DB *dbp, const DBT *a, const DBT *b)
{
int ai, bi;
/*
* Returns:
* < 0 if a < b
* = 0 if a = b
* > 0 if a > b
*/
memcpy(&ai, a->data, sizeof(int));
memcpy(&bi, b->data, sizeof(int));
return (ai - bi);
}
不隶属于 StackOverflow