将K String的映射保持为字符串的最佳方法?

时间:2015-05-28 07:31:38

标签: c++ dictionary

我必须创建N个元素的映射,即映射到字符串的N个元素。 N的值不是在编译时定义的,而是在运行时定义的。有一些标准的方法吗?目前我正在尝试使用字符串存储类X的映射,其中X具有字符串数组,但这似乎不适合我。

2 个答案:

答案 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"
}

DEMO

有了这个,你可以适当填写some_key课程并在地图中使用它。