比较地图对象及其参考 C++
Compare a map object and its reference C++
我有以下地图
map<int,string> m1;
map<int,string> m2;
call(m1);
call(m2);
template<typename T>
void call(T &m)
{
// Compare if m == m1
How to do?
}
我需要知道 m1
和 m2
中的哪一个在 运行 时间在当前函数中被调用。
如果要根据地图的内容进行查看,可以使用operator==
:
template<typename T>
void call(T &m)
{
if (m == m1)
...
}
如果要判断是否是同一个实例,由于参数是引用传递,可以比较地址:
template<typename T>
void call(T &m)
{
if (&m == &m1)
...
}
正如@Smeeheey 指出的那样,您需要考虑如何在模板函数中提供比较对象(即 m1
或其地址),而您的代码片段并不清楚。
为了改进已接受的答案,如果您想避免由于函数 call
在 map<int, string>
以外的类型上被调用而导致的编译器错误,您需要一个模板辅助函数:
template <typename T, typename U>
bool is_equal(const T& t, const U& u)
{
return false;
}
template <typename T>
bool is_equal(T& t, T& u)
{
return &t == &u;
}
template<typename T>
void call(T &m)
{
// Compare if m == m1
if(is_equal(m, m1))
std::cout << "Yes";
else
std::cout << "No";
}
我有以下地图
map<int,string> m1;
map<int,string> m2;
call(m1);
call(m2);
template<typename T>
void call(T &m)
{
// Compare if m == m1
How to do?
}
我需要知道 m1
和 m2
中的哪一个在 运行 时间在当前函数中被调用。
如果要根据地图的内容进行查看,可以使用operator==
:
template<typename T>
void call(T &m)
{
if (m == m1)
...
}
如果要判断是否是同一个实例,由于参数是引用传递,可以比较地址:
template<typename T>
void call(T &m)
{
if (&m == &m1)
...
}
正如@Smeeheey 指出的那样,您需要考虑如何在模板函数中提供比较对象(即 m1
或其地址),而您的代码片段并不清楚。
为了改进已接受的答案,如果您想避免由于函数 call
在 map<int, string>
以外的类型上被调用而导致的编译器错误,您需要一个模板辅助函数:
template <typename T, typename U>
bool is_equal(const T& t, const U& u)
{
return false;
}
template <typename T>
bool is_equal(T& t, T& u)
{
return &t == &u;
}
template<typename T>
void call(T &m)
{
// Compare if m == m1
if(is_equal(m, m1))
std::cout << "Yes";
else
std::cout << "No";
}