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