我需要像这样创建一个键/值对的集合:
map<const int, string[]> myMap; // psuedo code
最好的方法是什么?
有没有办法做到这一点,我可以在一行中初始化它,例如:
myMap.Insert(1, new string[]{ "stack", "is", "awesome" }); // pseudo code
您可以使用实用功能make_pair。
myMap.insert(make_pair(1,"stack"));
不知道为什么你需要一个string []
,你可以有一个唯一键引用的多个字符串,这不是选择一个的目的std::map
吗?为什么你需要一个数组然后std::map
已经提供了。
如果您不在乎是替换还是创建,请使用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;
}
}
假设您决定大致坚持当前使用的结构(以int
键和string
s 的集合作为关联值),您可能希望将其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)上会失败。
您应该看一下 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" } }
};