【问题标题】:Finding an element in a map<Struct, Struct>?在 map<Struct, Struct> 中查找元素?
【发布时间】:2014-10-19 04:10:45
【问题描述】:

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

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

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 对象匹配项的正确方法吗?还是有更快的方法?我已经对此进行了测试,但我并不完全相信它有效,因为当左侧和右侧相同时它似乎返回 false。我究竟做错了什么?任何帮助或建议将不胜感激,如果有更快的方法,我将不胜感激,因为我的程序非常注重性能。

谢谢

【问题讨论】:

  • 这不是真正的代码。不要发明伪代码。从您的编辑器中复制可编译代码。
  • 对不起,我担心共享公司代码......我想我担心太多了
  • 这与任何事情都无关。您可以在远离公司的地方打开一个新的空白文件并创建一个最小示例。只是在它编译之前不要发布它,并通过复制粘贴代码来发布它。
  • 好的。下次我将发布所有上述代码,但使用正确的变量名。 “这与任何事情都没有关系”似乎是一种真正礼貌的表达“那不是问题”的方式。非常感谢。
  • 变量名并不那么重要。拼写 struct 没错,但是,很重要,这就是为什么你绝对应该确保你的代码编译。

标签: c++ map struct find operator-keyword


【解决方案1】:

我已经对此进行了测试,但我并不完全相信它有效,因为当左侧和右侧相同时,它似乎返回 false。我做错了什么?

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,则应使用

【讨论】:

  • 回答不清楚的问题时不要做假设!
  • 我想要的只是让 find 函数返回包含匹配或不匹配对象的迭代器。我在问我编写的代码是否返回一个包含匹配对象的迭代器,该对象基于左侧的变量与右侧的变量相同,并且没有其他实例会认为两者相同,即一场比赛。这也是检查元素是否在地图中的最快方法(但地图是结构体)...
  • @PatriciaAydin 您应该在原始帖子中说明这一点。如果您要查找的只是地图中的完全匹配,我建议您根本不使用地图,而只需将值成员添加到您的结构中。然后将所有结构放入向量中。为什么需要地图?
  • 嗯...我想使用向量同样简单。谢谢 :)。它对性能有影响吗?
  • @PatriciaAydin 如果您想了解地图性能,您可能需要参考这个问题:stackoverflow.com/questions/10165708/stl-map-performance。总而言之,地图在 O(logn) 时间内找到对象。向量基本上是一个数组,所以时间复杂度是 O(n)。但是,目前还不清楚您到底想要什么。如果您想要做的只是证明结构集合中是否存在某些东西,只需使用向量,因为它需要 O(n) 时间来证明某些东西不存在。您也不必定义
猜你喜欢
  • 2020-04-03
  • 2013-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多