有什么方法可以通过引用 C++ 中的函数将默认值分配给作为参数传递的映射?
Is there any way to assign default value to a map passed as a parameter by reference to a function in C++?
我正在尝试在递归函数中使用 map(作为 DP 的实现)。在这里,我写了一个简单的斐波那契函数(我知道我可以在这里使用普通数组,但我想了解一些我可以在其他函数中使用的想法,这些函数将接受更复杂的输入,如对、字符串、对象等)。
#include <bits/stdc++.h>
using namespace std;
#define int long long
int fib(int n, map<int, int> &memo); // What I did
/* What I want:
Instead of pulling an external map as an argument,
the function will automatically create an empty map as a default parameter at the first call
and pass it by reference in the recursive calls. */
/* I tried some stuff
int fib(int n, map<int,int> memo={}); // Slow
int fib(int n, map<int, int> &memo, bool reset); // Works, but I want to know if there are any better idea which doesn't take 3 inputs
int fib(int n, map<int, int> &memo={}); // Doesn't compile (my target is something close to this)
*/
signed main()
{
map<int,int> mp; // Needs to be empty before being passed to fib()
int n;
cin >> n;
cout << n << ' ' << fib(n, mp); // I want to use just fib(n)
return 0;
}
int fib(int n, map<int, int> &memo) // The external memo needs to be empty
{
if(n==!!n) return n;
if(memo.find(n)!=memo.end()) return memo[n];
if(n<0)
{
if(n%2) return fib(-n, memo);
return -fib(-n, memo);
}
memo[n]=fib(n-1, memo)+fib(n-2, memo);
return memo[n];
}
我想知道有没有什么方法可以在C++中实现空map参数
您可以简单地重载函数:
int fib(int n)
{
std::map<int, int> map;
fib(n, map);
}
int fib(int n, map<int, int> &memo) { ... }
这是您要实现的目标吗?
旁注:您应该删除 #define int long long
,它不是合法的 C++ 并且完全令人困惑。
我正在尝试在递归函数中使用 map(作为 DP 的实现)。在这里,我写了一个简单的斐波那契函数(我知道我可以在这里使用普通数组,但我想了解一些我可以在其他函数中使用的想法,这些函数将接受更复杂的输入,如对、字符串、对象等)。
#include <bits/stdc++.h>
using namespace std;
#define int long long
int fib(int n, map<int, int> &memo); // What I did
/* What I want:
Instead of pulling an external map as an argument,
the function will automatically create an empty map as a default parameter at the first call
and pass it by reference in the recursive calls. */
/* I tried some stuff
int fib(int n, map<int,int> memo={}); // Slow
int fib(int n, map<int, int> &memo, bool reset); // Works, but I want to know if there are any better idea which doesn't take 3 inputs
int fib(int n, map<int, int> &memo={}); // Doesn't compile (my target is something close to this)
*/
signed main()
{
map<int,int> mp; // Needs to be empty before being passed to fib()
int n;
cin >> n;
cout << n << ' ' << fib(n, mp); // I want to use just fib(n)
return 0;
}
int fib(int n, map<int, int> &memo) // The external memo needs to be empty
{
if(n==!!n) return n;
if(memo.find(n)!=memo.end()) return memo[n];
if(n<0)
{
if(n%2) return fib(-n, memo);
return -fib(-n, memo);
}
memo[n]=fib(n-1, memo)+fib(n-2, memo);
return memo[n];
}
我想知道有没有什么方法可以在C++中实现空map参数
您可以简单地重载函数:
int fib(int n)
{
std::map<int, int> map;
fib(n, map);
}
int fib(int n, map<int, int> &memo) { ... }
这是您要实现的目标吗?
旁注:您应该删除 #define int long long
,它不是合法的 C++ 并且完全令人困惑。