我需要一个数据容器,用于根据一个或多个键(如int
和std::string
构建的键)收集数值数据。
对于一个密钥,如果应该收集多个值,我可以分别使用unordered_map<std::string, int>
unordered_map<std::string, List<int>>
。
拥有多个钥匙怎么样?其他帖子建议我使用std::make_pair<type1, type2>
作为密钥,但这只适用于2个密钥,看起来有点hacky。
是否有任何易于使用的数据结构或库允许由多个变量和分配给它的多个值构建的密钥?这些值只能通过键访问(我不需要类似boost :: multi_index的东西,它提供了几个访问值的接口)。此外,值不能在容器中排序,但是在数据处理期间添加/增加值时需要快速访问。
答案 0 :(得分:3)
您可以使用std :: tuple。元组比较适用于几乎所有内置类型的多个元素。例如
typedef tuple<int, int> tx;
tx t1 = make_tuple(1, 1);
tx t2 = make_tuple(1, 2);
if (t1 == t2) {
cout << "EQUAL" << endl;
}
或
typedef tuple<string, string> tx;
tx t1 = make_tuple("AB", "CD");
tx t2 = make_tuple("AB", "CD");
if (t1 == t2) {
cout << "EQUAL" << endl;
}
使用元组作为unordered_map中的键
使用地图的一个例子可能是
map<tx, int> mp;
mp[make_tuple("AB", "CD")] = 100;
mp[make_tuple("EF", "GH")] = 200;
要更新现有密钥,我们可以使用
mp[t1] = 300;