我需要创建一个键/值对的集合,如下所示:
map<const int, string[]> myMap; // psuedo code
最好的办法是什么? 有没有办法做到这一点,我可以在一行中初始化它,如:
myMap.Insert(1, new string[]{ "stack", "is", "awesome" }); // pseudo code
答案 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" } }
};