【发布时间】:2012-11-17 07:59:23
【问题描述】:
给定以下代码:
struct Item
{
std::string name;
int someInt;
string someString;
Item(const std::string& aName):name(aName){}
};
std::unordered_map<std::string, Item*> items;
Item* item = new Item("testitem");
items.insert(make_pair(item.name, item);
项目名称将在内存中存储两次 - 一次作为 Item 结构的一部分,一次作为映射条目的键。是否可以避免重复?对于大约 1 亿条记录,这种开销会变得很大。
注意: 我需要在 Item 结构中包含名称,因为我使用 hashmap 作为另一个 Item-s 容器的索引,并且我无法访问映射的键值。
【问题讨论】:
-
我认为Boost.MultiIndex提供了这种功能。
-
您的物品最初存放在哪里?
-
@Luc Touraille:是的,我考虑过多索引,但我不使用 Boost。有没有一种方法可以独立使用多索引,而无需构建/链接整个 boost 库?
-
Boost.MultiIndex 是一个只有头文件的库。您只链接您实际使用的容器实例和一堆帮助模板(如散列函数)。 Boost 发行版包含一个名为
bcp的工具,如果您只想将相关部分包含到版本控制中,它可以提取给定模块的依赖项。
标签: c++ stl hashmap unordered-map