1

我需要像这样创建一个键/值对的集合:

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

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

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

4 回答 4

1

您可以使用实用功能make_pair

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

不知道为什么你需要一个string [],你可以有一个唯一键引用的多个字符串,这不是选择一个的目的std::map吗?为什么你需要一个数组然后std::map已经提供了。

于 2012-05-28T04:42:19.773 回答
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;
    }
}
于 2012-05-28T04:49:27.393 回答
1

假设您决定大致坚持当前使用的结构(以int键和strings 的集合作为关联值),您可能希望将其std::vector<std::string>用作值,因此您map的定义如下:

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

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

mymap[1] = {"String", "is", "awesome"};

就目前而言,这取决于使用 C++11 大括号初始值设定项列表。这将适用于最新的编译器(例如,gcc 4.7.0),但在许多较旧的尚未接近符合 C++11 的编译器(例如,VC++10、VC++11 beta)上会失败。

于 2012-05-28T06:05:32.163 回答
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" } }
};
于 2012-05-28T06:15:33.683 回答