我必须创建N个元素的映射,即映射到字符串的N个元素。 N的值不是在编译时定义的,而是在运行时定义的。有一些标准的方法吗?目前我正在尝试使用字符串存储类X的映射,其中X具有字符串数组,但这似乎不适合我。
答案 0 :(得分:3)
您可以使用std::map<std::set<std::string>, std::string>
看一下例子:
#include <map>
#include <set>
#include <string>
#include <iostream>
int main()
{
typedef std::set<std::string> key_t;
std::map<key_t, std::string> m;
m[{"a", "b", "c"}] = "Hello,";
m[{"d", "e"}] = "world!";
m[{"f"}] = "\n";
std::cout << m[{"a", "b", "c"}] << m[{"d", "e"}] << m[{"f"}];
}
请在启用c ++ 11的情况下编译。
答案 1 :(得分:0)
编辑:在标题中,它表示“K strings to string”,但在正文中,OP仅提及元素。所以我发布了一个针对各种非特定元素的通用方法。
以下是您似乎想要实现的草图:
struct some_key
{
int a = 0;
double b = 0;
std::string c;
std::vector<int> d;
// ... and so on
bool operator<(some_key const& rhs) const
{
return std::tie(a,b,c,d)<std::tie(rhs.a,rhs.b,rhs.c,rhs.d);
}
};
int main()
{
some_key key1;
some_key key2;
key2.a=1;
std::map<some_key, std::string> m;
m[key1] = "hi";
m[key2] = "goodbye";
std::cout<<m[key1]<<std::endl; //prints "hi"
}
有了这个,你可以适当填写some_key
课程并在地图中使用它。