函数中的默认参数对 c++ 中的引用 unordered_map
Default parameter in function to a reference in c++ unordered_map
我是一名 JS 开发人员,为了实现这个函数头,我这样做了:
function gridTraveler(m,n,memo={})
这里,我知道对象在JS中是通过引用传递的
所以在 C++ 中,我决定这样做:
int gridTraveler(int m,int n,std::unordered_map<int,int>& memo = {})
但我得到一个错误:“对非 const 的初始引用必须是左值”。
我应该如何将默认参数传递给函数以及通过引用传递 hasmap?
注意:我将通过在函数主体中添加键和值来编辑备忘录对象
您不能对临时值进行引用。
这里:std::unordered_map<int, int>& memo = {} //The "{}" is a tempory value
使用 const std::unordered_map<int, int>& memo = {}
或使用不带“&”的值。
您的意思可能可以通过处理无序映射生命周期的双参数重载来实现。
int gridTraveler(int m,int n,std::unordered_map<int,int>& memo) {
//your implementation here
}
int gridTraveler(int m, int n) {
std::unordered_map<int,int> memo = {};
return gridTraveler(m, n, memo);
}
考虑明确告诉它您真正想要什么或创建多个函数 - 一个接受地图或不接受地图的函数。
可能性一:有时候你想提供一张地图,但是这张地图没有任何操作价值;它只是一些可选的输出。 C++ 尽最大努力防止 NULL 值作为引用,因此使用指针。如果您真的不需要,向一次性地图添加值也很愚蠢。
int gridTraveler(int m,int n,std::unordered_map<int,int>* const memo = nullptr)
{
//code stuff for operation
if(memo) //optional output related operations occur if it was provided
{
//populate memo if it is available
}
}
可能性 2:您希望有时输出一张在操作中内部使用的地图。未提供时,您想使用一个空映射作为值,然后将其丢弃。您的操作需要地图,但它是副产品,您只是有时关心它的值。
int gridTraveler(int m,int n,std::unordered_map<int,int>& memo)
{
//do your thing...
}
int gridTraveler(int m,int n)
{
std::unordered_map<int,int> memo;
const int returnval = gridTraveler(m,n,memo);
//last chance to do something with memo here before it gets thrown out
return returnval;
}
还有很多其他可能性 - 我可以想到地图最好实现的场景 class 成员,其中 gridTraveler 是 class 的函数以及地图的位置全局范围,每个进程仅初始化一次为空映射。
我是一名 JS 开发人员,为了实现这个函数头,我这样做了:
function gridTraveler(m,n,memo={})
这里,我知道对象在JS中是通过引用传递的
所以在 C++ 中,我决定这样做:
int gridTraveler(int m,int n,std::unordered_map<int,int>& memo = {})
但我得到一个错误:“对非 const 的初始引用必须是左值”。
我应该如何将默认参数传递给函数以及通过引用传递 hasmap?
注意:我将通过在函数主体中添加键和值来编辑备忘录对象
您不能对临时值进行引用。
这里:std::unordered_map<int, int>& memo = {} //The "{}" is a tempory value
使用 const std::unordered_map<int, int>& memo = {}
或使用不带“&”的值。
您的意思可能可以通过处理无序映射生命周期的双参数重载来实现。
int gridTraveler(int m,int n,std::unordered_map<int,int>& memo) {
//your implementation here
}
int gridTraveler(int m, int n) {
std::unordered_map<int,int> memo = {};
return gridTraveler(m, n, memo);
}
考虑明确告诉它您真正想要什么或创建多个函数 - 一个接受地图或不接受地图的函数。
可能性一:有时候你想提供一张地图,但是这张地图没有任何操作价值;它只是一些可选的输出。 C++ 尽最大努力防止 NULL 值作为引用,因此使用指针。如果您真的不需要,向一次性地图添加值也很愚蠢。
int gridTraveler(int m,int n,std::unordered_map<int,int>* const memo = nullptr)
{
//code stuff for operation
if(memo) //optional output related operations occur if it was provided
{
//populate memo if it is available
}
}
可能性 2:您希望有时输出一张在操作中内部使用的地图。未提供时,您想使用一个空映射作为值,然后将其丢弃。您的操作需要地图,但它是副产品,您只是有时关心它的值。
int gridTraveler(int m,int n,std::unordered_map<int,int>& memo)
{
//do your thing...
}
int gridTraveler(int m,int n)
{
std::unordered_map<int,int> memo;
const int returnval = gridTraveler(m,n,memo);
//last chance to do something with memo here before it gets thrown out
return returnval;
}
还有很多其他可能性 - 我可以想到地图最好实现的场景 class 成员,其中 gridTraveler 是 class 的函数以及地图的位置全局范围,每个进程仅初始化一次为空映射。