与我之前的问题类似,我想将一些属性存储为我的地图的关键字,值也将是一个不同的结构。
我现在有一张这样的地图:
std::map<SKey, SValue> m_mMap;
SKey具有以下结构:
Struct SKey
{
string str1,
string str2,
unsigned long long ull1
};
我想实现最快的方法来检索与所有这些变量匹配的迭代器。所以像这样:
std::map<SKey, SValue>::iterator iter = m_mMap.find(m_sKey);
我到目前为止检查地图中是否存在匹配并检索迭代器的内容如下:
inline bool operator<(const SKey& lhs, const SKey& rhs)
{
return std::tie(lhs.strSrcAddr, lhs.strDstAddr, lhs.ullSequenceNo) < std::tie(rhs.strSrcAddr, rhs.strDstAddr, rhs.ullSeqNo);
}
这是找到SKey对象匹配的正确方法吗?或者有更快的方法吗?我已经测试了这个,但我并不完全相信它有效,因为当左侧和右侧相同时它似乎返回假。我究竟做错了什么?任何帮助或建议将不胜感激,如果有更快的方式,我会很感激,因为我的程序非常注重性能。
由于
答案 0 :(得分:0)
我已经对此进行了测试,但我并不完全相信它有效,因为当左侧和右侧相同时它似乎返回假。我做错了什么?
inline bool operator<(const SKey& lhs, const SKey& rhs)
{
return std::tie(lhs.strSrcAddr, lhs.strDstAddr, lhs.ullSequenceNo) < std::tie(rhs.strSrcAddr, rhs.strDstAddr, rhs.ullSeqNo);
}
由于小于运算符的属性,当左侧和右侧相同时,该行应该返回false。如果希望它返回true,则应使用&lt; =运算符。