C/C++多映射库

C/C++多映射库,c++,c,C++,C,我存储了1.11亿个键值对一个键可以有多个值-最大值为2/3,其键为50位整数,值为32位最大整数。现在,我的要求是: 快速插入键、值对[允许重复] 基于键快速检索值。 是否有任何C/C++库可以使用MultiMap、B+树、B-树、R+树等解决此问题?我可以为此提供5/6GB的主内存。有关更多信息:。C中的普通哈希表每个元素需要50+32+14填充+32+32位可能是32位对齐。即每个元素160或192位:=每个元素20或24字节。 哈希表将占用111*20或111*24MB的内存。也就是2.

我存储了1.11亿个键值对一个键可以有多个值-最大值为2/3,其键为50位整数,值为32位最大整数。现在,我的要求是:

快速插入键、值对[允许重复] 基于键快速检索值。
是否有任何C/C++库可以使用MultiMap、B+树、B-树、R+树等解决此问题?我可以为此提供5/6GB的主内存。有关更多信息:。

C中的普通哈希表每个元素需要50+32+14填充+32+32位可能是32位对齐。即每个元素160或192位:=每个元素20或24字节。
哈希表将占用111*20或111*24MB的内存。也就是2.2GB或2.7GB。

C中的普通哈希表每个元素需要50+32+14填充+32+32位。+可能是32位对齐。即每个元素160或192位:=每个元素20或24字节。
哈希表将占用111*20或111*24MB的内存。即2.2 GB或2.7 GB。

您的要求不包括任何订购集合的需要。使用哈希映射。如果您找不到现成的,那么创建一个也不是什么大挑战。

您的需求不包括任何订购集合的需求。使用哈希映射。如果你找不到现成的,那么创建一个也不是什么大挑战。

因为5/6G字节实际上意味着5或6G字节

带有50位键和32位值的111000000个键/值对在存储为紧密压缩位数组时,需要111000000*50+32/8*1024*1024*1024=1.05 GB或内存

你的记忆力比那多5倍

在最坏的情况下,基于64位系统的10级深度跳过列表映射需要111000000*64+32+10*16/8*1024*1024*1024=3.308千兆字节,并且仍然需要超过千兆字节的RAM来处理堆管理开销

因此,我建议你抓取任何可用的多重地图,并尝试使用它——在我看来,你有足够的内存来处理你的情况,而不需要使用任何额外的技巧

-编辑-

事实上,我不知道信用证++

P>那么,如果你不知道C++,你如何期望使用包含111000000的密钥的地图?你得读点书


标准库包括std::multimap,boost库中有几个类。Qt4包括基于跳过列表的QMap。尝试使用其中任何一个。

因为5/6G字节实际上意味着5或6G字节

带有50位键和32位值的111000000个键/值对在存储为紧密压缩位数组时,需要111000000*50+32/8*1024*1024*1024=1.05 GB或内存

你的记忆力比那多5倍

在最坏的情况下,基于64位系统的10级深度跳过列表映射需要111000000*64+32+10*16/8*1024*1024*1024=3.308千兆字节,并且仍然需要超过千兆字节的RAM来处理堆管理开销

因此,我建议你抓取任何可用的多重地图,并尝试使用它——在我看来,你有足够的内存来处理你的情况,而不需要使用任何额外的技巧

-编辑-

事实上,我不知道信用证++

P>那么,如果你不知道C++,你如何期望使用包含111000000的密钥的地图?你得读点书


标准库包括std::multimap,boost库中有几个类。Qt4包括基于跳过列表的QMap。尝试使用其中任何一个。

您的整个数据集可能占用9GB的空间。有一种最简单的解决方案——使用std::map/std::multimap并依靠操作系统交换。这是怎么工作的?C还是C++,选一个。如果这两种语言都有,答案很可能完全不同。你必须提供更多的参数,比如从一开始所有的值都存在吗?速度或空间是主要参数吗?最初的C++答案是将所有的加载到STD::vector中,并排序它。然后使用二进制搜索。@BoPersson,不。我必须反复添加传入密钥,Value@RafałRawicki,我只能提供5/6GB。您的整个数据集可以占用9GB。有一种最简单的解决方案——使用std::map/std::multimap并依靠操作系统交换。这是怎么工作的?C还是C++,选一个。如果这两种语言都有,答案很可能完全不同。你必须提供更多的参数,比如从一开始所有的值都存在吗?速度或空间是主要参数吗?最初的C++答案是将所有的加载到STD::vector中,并排序它。然后使用二进制搜索。@BoPersson,不。我必须反复添加传入密钥,Value@RafałRawicki,我只能提供5/6GB的容量。谢谢。事实上,在高中阶段我对C/C++一窍不通。这就是为什么我要寻找现成的。任何指向一个好的图书馆的指针都会对我有帮助。你为此得到报酬了吗?还是这是家庭作业?无法计算,无法自己创建代码,无法搜索web f
或易于使用的库我尝试了许多库和代码。但是,无法实现所需的性能。这就是为什么在开始新的一个之前,需要建议。顺便说一句,我做这些蠢事得到了我父亲的报酬。我必须解决很多项目和考试,这就是为什么我可能会被问到一些愚蠢的问题。对不起,谢谢。事实上,在高中阶段我对C/C++一窍不通。这就是为什么我要寻找现成的。任何指向一个好的图书馆的指针都会对我有帮助。你为此得到报酬了吗?还是这是家庭作业?无法计算,无法自己创建代码,无法在web上搜索易于使用的库我尝试了很多库和代码。但是,无法实现所需的性能。这就是为什么在开始新的一个之前,需要建议。顺便说一句,我做这些蠢事得到了我父亲的报酬。我必须解决很多项目和考试,这就是为什么我可能会被问到一些愚蠢的问题。对不起,谢谢。事实上,在高中阶段我对C/C++一窍不通。这就是为什么我要寻找现成的。任何指向一个好的库的指针都会对我有帮助。因为,就像在Java中一样,我无法解决它。谢谢。我期待着你所说的,因为我在Java中面临与OOP相同的问题。但是,从一些讨论中我发现,C应该有这样的设施和C++可能有。这就是为什么尝试一个想法可以从希望开始。如果C/C++有,我就开始阅读。事实上,我浪费了很多时间,使用了一些愚蠢的工具。所以,只是有点紧张。顺便说一句,谢谢。事实上,在高中阶段我对C/C++一窍不通。这就是为什么我要寻找现成的。任何指向一个好的库的指针都会对我有帮助。因为,就像在Java中一样,我无法解决它。谢谢。我期待着你所说的,因为我在Java中面临与OOP相同的问题。但是,从一些讨论中我发现,C应该有这样的设施和C++可能有。这就是为什么尝试一个想法可以从希望开始。如果C/C++有,我就开始阅读。事实上,我浪费了很多时间,使用了一些愚蠢的工具。所以,只是有点紧张。顺便说一句,谢谢。