比较地图对象及其引用C++

Compare a map object and its reference C++

本文关键字:引用 C++ 地图 对象 比较      更新时间:2023-10-16

我有以下地图

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?
}

我需要知道在运行时在当前函数中调用了哪些m1m2

如果要根据地图的内容进行检查,可以使用operator==

template<typename T>
void call(T &m)
{
  if (m == m1)
    ...
}

如果要确定它们是否是同一实例,由于参数是通过引用传递的,因此可以比较它们的地址:

template<typename T>
void call(T &m)
{
  if (&m == &m1)
    ...
}

正如@Smeeheey指出的,您需要考虑如何提供比较对象(即 m1或其地址)在模板函数中,从您的代码段中不清楚。

为了改进接受的答案,如果要避免由于在map<int, string>以外的类型上调用函数而导致call编译器错误,则需要一个模板帮助程序函数:

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";
}