C++ find_if和map的函子,避免值的复制

C++ find_if和map的函子,避免值的复制,c++,C++,对于带有std::map的函子,有没有办法避免std::pair中的值被复制(我猜这就是幕后发生的事情) struct request_number_find { request_number_find(const unsigned __int64 &baseline) : _baseline(baseline) {} bool operator() (const std::pair<guid, RadioTransmitterInformation> &ar

对于带有
std::map
的函子,有没有办法避免
std::pair
中的值被复制(我猜这就是幕后发生的事情)

struct request_number_find
{
  request_number_find(const unsigned __int64 &baseline) : _baseline(baseline) {}
  bool operator() (const std::pair<guid, RadioTransmitterInformation> &arg)
//-------------------------------------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  { 
    return _baseline == arg.second.mPropagationServer.mRequestNumber; 
  }
  unsigned __int64 _baseline;
};
guid\u比较:

struct guid_compare {
  bool operator() (const guid& lhs, const guid& rhs) const{
    return lhs < rhs;
  }
};
谢谢

或者更好:

const decltype(mRTMap)::value_type &t
如果你有C++14,那就更好了:

const auto &t

如果映射的类型为
std::map
,则它存储类型为
std::pair
的值-请注意
const

由于
std::pair
是另一种类型,编译器必须生成一个临时
pair
来调用您的functor(在任一版本中)


因此,请尝试使用
const std::pair&
参数,或者可能使用
const decltype(mRTMap)::value\u type&

如何使用
decltype
版本?你的地图实际上是一张
地图吗?你没有发邮件,所以我不能确定。该死的,我犯了个大错。你的回答解决了我的问题。谢谢!
std::find_if(mRTMap.begin(), mRTMap.end(), request_number_find(24031));
const std::pair<guid, RadioTransmitterInformation> &t
const std::pair<const guid, RadioTransmitterInformation> &t
const decltype(mRTMap)::value_type &t
const auto &t