多个键的c ++ stl选择
c++ stl selection for multiple keys
c++ stl专家,
在协议栈实现中,我有一条消息从一层发送到另一层。源层存储一些信息,并在接收到来自第二层的响应时处理这些信息。
现在存储的信息有3个参数,用于比较目标层的响应。 (得到正确的)。即让我们说会话 ID、请求编号和 infoID。存储的信息包含一个结构,比方说结构 A.
在源层中实现此功能以存储信息的最佳方式是什么?
一开始我想到了下面的,因为当时只有两个键
std::map<std::pair<u32, u32>, StructA> m_mSessionId2RNum2StructA;
但稍后需要另一个密钥。这变得复杂了
struct StructZ
{
u32 InfoId;
StructA stStructA;
};
std::map<std::pair<u32, u32>, StructZ> m_mSessionId2RNum2StructZ;
这看起来不太好。任何 inputs/suggestions 改进这一点非常感谢
谢谢
~pdk
也许 StructK
可以作为 StructA
的键作为映射中的值:
struct StructK
{
u32 k1;
u32 k2;
u32 k3;
};
inline bool operator< (const StructK& lhs, const StructK& rhs)
{
if(lhs.k1 < rhs.k1)
return true;
else
if(lhs.k1 == rhs.k1)
{
if(lhs.k2 < rhs.k2)
return true;
else
if(lhs.k2 == rhs.k2)
{
return lhs.k3 < rhs.k3;
}
else
return false;
}
else
return false;
}
然后
map<StructK, StructA> myMap;
当然,您可以对operator<
使用任何逻辑
std::pair
是一种特殊类型的 std::tuple
,它只能包含两个值,而 tuple
可以包含几十 (1) 个值。 IE。您现在似乎想要 std::tuple<u32, u32,u32>
作为键。
您使用 tuple
免费获得 operator<
,与使用 pair
相同。
如果您需要 备用 索引,即按关键字 1、2 或 3 进行搜索,那么您需要 boost::multi_index
个容器.
(1) 检查您的实施以获得精确的限制。
c++ stl专家, 在协议栈实现中,我有一条消息从一层发送到另一层。源层存储一些信息,并在接收到来自第二层的响应时处理这些信息。
现在存储的信息有3个参数,用于比较目标层的响应。 (得到正确的)。即让我们说会话 ID、请求编号和 infoID。存储的信息包含一个结构,比方说结构 A.
在源层中实现此功能以存储信息的最佳方式是什么?
一开始我想到了下面的,因为当时只有两个键
std::map<std::pair<u32, u32>, StructA> m_mSessionId2RNum2StructA;
但稍后需要另一个密钥。这变得复杂了
struct StructZ
{
u32 InfoId;
StructA stStructA;
};
std::map<std::pair<u32, u32>, StructZ> m_mSessionId2RNum2StructZ;
这看起来不太好。任何 inputs/suggestions 改进这一点非常感谢 谢谢 ~pdk
也许 StructK
可以作为 StructA
的键作为映射中的值:
struct StructK
{
u32 k1;
u32 k2;
u32 k3;
};
inline bool operator< (const StructK& lhs, const StructK& rhs)
{
if(lhs.k1 < rhs.k1)
return true;
else
if(lhs.k1 == rhs.k1)
{
if(lhs.k2 < rhs.k2)
return true;
else
if(lhs.k2 == rhs.k2)
{
return lhs.k3 < rhs.k3;
}
else
return false;
}
else
return false;
}
然后
map<StructK, StructA> myMap;
当然,您可以对operator<
std::pair
是一种特殊类型的 std::tuple
,它只能包含两个值,而 tuple
可以包含几十 (1) 个值。 IE。您现在似乎想要 std::tuple<u32, u32,u32>
作为键。
您使用 tuple
免费获得 operator<
,与使用 pair
相同。
如果您需要 备用 索引,即按关键字 1、2 或 3 进行搜索,那么您需要 boost::multi_index
个容器.
(1) 检查您的实施以获得精确的限制。