int / string []的集合,每行插入一行代码

时间:2012-05-28 04:40:35

标签: c++ string std

我需要创建一个键/值对的集合,如下所示:

map<const int, string[]> myMap; // psuedo code

最好的办法是什么? 有没有办法做到这一点,我可以在一行中初始化它,如:

myMap.Insert(1, new string[]{ "stack", "is", "awesome" }); // pseudo code

4 个答案:

答案 0 :(得分:1)

您可以使用效用函数 make_pair

myMap.insert(make_pair(1,"stack"));

不确定为什么你需要一个string [],你可以用一个唯一的密钥来判断多个字符串,这不是选择std::map的目的吗?为什么你需要一个数组,然后std::map已经提供了。

答案 1 :(得分:1)

如果您不在乎是否正在替换或仅使用operator[]

    std::map<int, std::string> mymap;
    mymap[1] = "stack is awesome";

不要在地图中使用指针。或者使用std::multimap用于具有相同密钥的多个元素。

std::multimap的示例:

int main() {
    std::multimap<int, std::string> mymmap{{1, "stack"},
                       {1, "is"},
                       {1, "awesome"}};
    auto range = mymmap.equal_range(1);
    for (auto i = range.first; i != range.second; ++i)
    {
        std::cout << (*i).second << std::endl;
    }
}

答案 2 :(得分:1)

假设您决定坚持使用当前正在使用的结构(以int作为键,并将string s的集合作为关联值),您可能希望使用{{1 }}作为值,因此您的std::vector<std::string>定义如下:

map

在这种情况下,最简单的方法是使用类似数组的表示法进行插入:

std::map<int, std::vector<std::string> > mymap;

目前,这取决于使用C ++ 11支持的初始化列表。这将适用于最新的编译器(例如,gcc 4.7.0),但许多较旧的编译器仍然没有接近符合C ++ 11(例如,VC ++ 10,VC ++ 11 beta)。< / p>

答案 3 :(得分:1)

你应该看看std :: multimap,它可能更适合你的用例:

multimap<int, string> mm;

它与map相同,只是它可以为同一个键保存多个值。这通常由二叉树实现,它不会强制实现唯一性。

http://en.cppreference.com/w/cpp/container/multimap

或者您可以使用:

map<int, vector<string>> m;

您可以像这样初始化:

map<int, vector<string>> m {
    { 1, { "stack", "is", "awesome" } },
    { 42, { "foo", "bar", "baz" } }
};