Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于C+的数据存储库+; 我想在我的代码中使用一些小C++库,这样做可以做如下的事情: DataStore ds; ds.open("data.bin"); int num=5; std::string str="some text"; ds.put("key1",num); ds.put("key2",str); ds.get("key1");// returns int(5) ds.get("key2");// returns std::string("some text")_C++_Data Storage - Fatal编程技术网

用于C+的数据存储库+; 我想在我的代码中使用一些小C++库,这样做可以做如下的事情: DataStore ds; ds.open("data.bin"); int num=5; std::string str="some text"; ds.put("key1",num); ds.put("key2",str); ds.get("key1");// returns int(5) ds.get("key2");// returns std::string("some text")

用于C+的数据存储库+; 我想在我的代码中使用一些小C++库,这样做可以做如下的事情: DataStore ds; ds.open("data.bin"); int num=5; std::string str="some text"; ds.put("key1",num); ds.put("key2",str); ds.get("key1");// returns int(5) ds.get("key2");// returns std::string("some text"),c++,data-storage,C++,Data Storage,使用风格不必与代码示例相同,但原则应该保持不变(获取/设置任何类型的值并将其存储在文件blob中)。库也不应该是基于SQL的,也不应该是SQL包装器。这些图书馆是什么?它们的优势是什么 编辑:最多可使用10k密钥,每个密钥大约有100字节的数据,文件不需要在计算机或操作系统之间可移植,文件不应该使用文本编辑器进行编辑(如果不是,则看起来更专业),并且不必具有多线程意识。一个选项是使用及其,或者: BekeleyDB占地面积小,速度快、成熟且健壮。BerkeleyDB的另一个优点是,大多数脚本语言

使用风格不必与代码示例相同,但原则应该保持不变(获取/设置任何类型的值并将其存储在文件blob中)。库也不应该是基于SQL的,也不应该是SQL包装器。这些图书馆是什么?它们的优势是什么


编辑:最多可使用10k密钥,每个密钥大约有100字节的数据,文件不需要在计算机或操作系统之间可移植,文件不应该使用文本编辑器进行编辑(如果不是,则看起来更专业),并且不必具有多线程意识。

一个选项是使用及其,或者:

BekeleyDB占地面积小,速度快、成熟且健壮。BerkeleyDB的另一个优点是,大多数脚本语言(如Python、Perl等)都有绑定,因此您可以使用它们操作(检查、可视化)数据


缺点是你可以在其中存储一个键值对,键值和值都是字符串(或者是BLUB),所以你必须从C++数据类型转换成字符串/ BLUB。你所需要的只是一些可以读/写键的函数,一个“这是什么类型”的标签(如果我们假设存储的数据不是很大的话,可能还要加上存储的数据的大小——我指的是每个项目几MB左右)。您可能会发现使用某种“索引结构”或“下一个元素在哪里”位置引用会有所帮助

您的
ds.get(std::string)
的显示方式有一个小问题:您实际上无法从同一个函数返回
int
std::string
。您可以编写一个函数,该函数以
std::string
作为引用,另一个函数以
int
作为引用,或者类似的函数

如果你需要很多键,它会变得更有趣——在这一点上,你可能需要某种散列或二叉树类型的组织来搜索键。10k密钥可能不是什么大问题-如果您按排序顺序存储它们,它会变得更容易

文件不应使用文本编辑器进行编辑(如果不是,则看起来更专业)


我必须说,我不同意这一点。我发现文本可编辑文件看起来非常专业。它是二进制的这一事实只会让事情变得尴尬,如果应用程序中的某些东西不能按您的意愿工作,那么就更难处理(例如,它存储了安装路径,您移动了它,它不再工作,并且由于您无法启动它,它将不允许您编辑该配置)。

有几十个或更多的“ini库”那里的项目。即使这些都不是像您描述的那样简单的对象,在它们上面创建这样的对象肯定是微不足道的。@mah您是对的,但我不喜欢在INI文件中存储数据,我认为这不是很专业……这是一个很大的空间。答案取决于一些问题。您有1000、1000000或100000000把钥匙吗?文件是否需要在机器之间可移植?文件是否需要使用文本编辑器进行编辑?文件是否需要由多个进程同时访问?@brianbeuning我已经添加了您要求的答案。可能是boost::serialization?好的,在某些情况下,您对“可编辑”部分的看法是正确的,但我还有其他原因不使用易于编辑的文件…好的,祝您好运。谢谢你的编辑,我不知道第三个API。