【发布时间】:2016-09-27 08:07:27
【问题描述】:
我需要一个数据容器来收集基于一个或多个键的数字数据(例如由 int 和 std::string 构建的键)。
对于一个键,如果要收集多个值,我可以简单地使用unordered_map<std::string, int> 和unordered_map<std::string, List<int>>。
如果有多个键呢?其他帖子建议我使用 std::make_pair<type1, type2> 作为键,但这仅适用于 2 个键并且看起来有点 hacky。
是否有任何易于使用的数据结构或库允许由多个变量构建的键和分配给它的多个值?这些值只能通过键访问(我不需要类似 boost::multi_index 的东西,它提供了几个访问值的接口)。此外,这些值不得在容器中排序,但需要快速访问,因为在数据处理期间会添加/递增值。
【问题讨论】:
-
最终将
std::tuple用于多个键值?我不知道这是否可能。 -
创建一个包含多个成员的结构并将其用作键只要所需的运算符重载就可以正常工作。
-
@GillBates 我认为除了相等运算符 std::hash 之外的无序集合也应该是专门的......
-
愚蠢的问题(或不是):“复合键”中的“多个”,或“多个键中的任何一个指向一个数据”中的“多个”
-
@Patrick stackoverflow.com/a/17017281/1870760 向您展示您需要知道的一切,只需将两个成员与
std::hash结合起来即可。
标签: c++ c++11 containers