C++ 在地图中查找元素<;结构,结构>;?

C++ 在地图中查找元素<;结构,结构>;?,c++,map,struct,find,operator-keyword,C++,Map,Struct,Find,Operator Keyword,因此,与我前面的问题类似,我想存储一些属性作为映射的键,并且值也将是不同的结构 我现在有一张这样的地图: std::map<SKey, SValue> m_mMap; 我想实现一种最快的方法来检索匹配所有这些变量的迭代器。比如说: std::map<SKey, SValue>::iterator iter = m_mMap.find(m_sKey); std::map::iterator iter=m_mMap.find(m_sKey); 到目前为止,我要检查映射中

因此,与我前面的问题类似,我想存储一些属性作为映射的键,并且值也将是不同的结构

我现在有一张这样的地图:

std::map<SKey, SValue> m_mMap;
我想实现一种最快的方法来检索匹配所有这些变量的迭代器。比如说:

std::map<SKey, SValue>::iterator iter = m_mMap.find(m_sKey);
std::map::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);
}
内联布尔运算符
我已经测试过了,但我不完全相信它是有效的,因为当左侧和右侧相同时,它似乎返回false。我做错了什么


内联布尔运算符这不是真正的代码。不要发明伪代码。从你的编辑器复制可编译代码。很抱歉,我担心共享公司代码。。。我想我担心的太多了,这跟什么都没有关系。您可以在公司之外打开一个新的空白文件,并创建一个最小的示例。只是在编译之前不要发布,然后通过复制粘贴代码来发布。好的。下一次,我将发布上述所有代码,但使用正确的变量名。“这与任何事情都无关”似乎是一种真正礼貌的表达“这不是问题”的方式。非常感谢。变量名并不那么重要。然而,拼写
struct
正确是很重要的,这就是为什么你应该绝对确保你的代码能够编译。回答不清楚的问题时不要做假设!我只想让find函数返回一个迭代器,该迭代器包含一个匹配或不匹配的对象。我在问我写的代码是否返回一个迭代器,其中包含一个匹配的对象,该迭代器基于左侧的变量与右侧的变量相同,并且没有其他实例会认为这两个变量相同,即匹配。这也是检查元素是否在映射中(但映射是struct-struct)的最快方法。@PatriciaAydin您应该在原始帖子中明确这一点。如果您所寻找的只是映射中的精确匹配,我建议您根本不要使用映射,只需向结构中添加一个值成员。然后将所有结构放入一个向量中。你为什么要有地图?嗯。。。我想使用向量也同样简单。谢谢:)。这对性能有影响吗?@PatriciaAydin如果您想了解地图性能,您可能需要参考此问题:。总而言之,映射在O(logn)时间内查找对象。向量基本上是一个数组,因此时间复杂度为O(n)。然而,你到底想要什么还不清楚。如果你想做的只是证明你的结构集合中是否存在某些东西,那么就使用向量,因为证明某些东西根本不存在需要O(n)个时间。您也不必定义<运算符。
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);
}
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);
}