是否可以将unordered_map声明并初始化为函数参数?

时间:2015-06-03 03:38:55

标签: c++

可以在一行中声明和初始化无序地图,如下所示:

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"}});
编辑:这是正确的方法吗?请提供语法示例。

2 个答案:

答案 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"}});
}