C++ 具有多个键/值的无序容器

C++ 具有多个键/值的无序容器,c++,c++11,containers,C++,C++11,Containers,我需要一个数据容器,用于收集基于一个或多个键的数字数据(例如由int和std::string构建的键) 对于一个键,如果需要收集多个值,我只需分别使用unordered\u map 有多把钥匙怎么样?其他帖子建议我使用std::make_-pair作为密钥,但这只适用于2个密钥,看起来有点粗糙 是否有任何易于使用的数据结构或库允许使用多个变量和分配给它的多个值构建键?值只能由键访问(我不需要像boost::multi_index这样的东西,它提供了几个访问值的接口)。此外,不能在容器中对值进行排

我需要一个数据容器,用于收集基于一个或多个键的数字数据(例如由
int
std::string
构建的键)

对于一个键,如果需要收集多个值,我只需分别使用
unordered\u map

有多把钥匙怎么样?其他帖子建议我使用
std::make_-pair
作为密钥,但这只适用于2个密钥,看起来有点粗糙


是否有任何易于使用的数据结构或库允许使用多个变量和分配给它的多个值构建键?值只能由键访问(我不需要像boost::multi_index这样的东西,它提供了几个访问值的接口)。此外,不能在容器中对值进行排序,但是需要快速访问,因为在数据处理过程中添加/增加值。

可以使用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;
}

最终对多个键值使用
std::tuple
?我不知道这是否可行。创建一个包含多个成员的结构,并将其用作键,只要所需的运算符被重载,就可以正常工作。@GillBates我认为除了相等运算符std::hash之外,无序集合的情况也应该被专门化……愚蠢的问题(或否):“多个”的含义“复合键”,或“多个”意思是“多个键中的任何一个指向一个数据”“@Patrick向您展示了您需要知道的一切,只需将这两个成员与
std::hash
组合即可。我用tuple进行了尝试,它需要实现一个hash函数。因此,基本上与使用struct所需的工作相同?不,您不需要,您可以编写这样的映射;tx t1=制造元组(“AB”、“CD”);tx t2=制造元组(“AB”、“CD”);如果(t1==t2){谢谢你的额外解释!我认为元组的优点是不必实现任何哈希和比较函数,但是如果使用了许多参数,结构更容易理解。
typedef tuple<string, string> tx;
    tx t1 = make_tuple("AB", "CD");
    tx t2 = make_tuple("AB", "CD");

    if (t1 == t2) {
        cout << "EQUAL" << endl;
    }
map<tx, int> mp;
mp[make_tuple("AB", "CD")] = 100;
mp[make_tuple("EF", "GH")] = 200;
mp[t1] = 300;