可以在一行中声明和初始化无序地图,如下所示:
std::unordered_map<std::string,std::string> colors({{"sky","blue"}});
但是可以用它代替函数参数吗?
例如,如果我有一个具有以下签名的函数:
void foo(std::unordered_map<std::string,std::string> inputColors);
我可以通过声明和初始化地图作为参数来调用它吗?
例如:
foo(std::unordered_map<std::string,std::string> colors({{"sky","blue"}});
编辑:这是正确的方法吗?请提供语法示例。
答案 0 :(得分:1)
您只需提供初始化程序:
foo({{"sky", "blue"}});
这将用于构造一个临时的unordered_map
,它将被传递给该函数。如果函数重载使得存在歧义,那么您可以完全拼写该名称。
foo(std::unordered_map<std::string,std::string>{{"sky","blue"}});
答案 1 :(得分:0)
是的,有可能。程序将为该参数创建rvalue
引用。
void foo(std::unordered_map<std::string,std::string> colors)
{
for(auto &x : colors)
{
std::cout<< x.first<<"\n";
std::cout<<x.second<<"\n";
}
}
int main()
{
foo({{"sky","blue"}});
}