所以我目前有一张地图,其中包含unsigned long long
作为键,MyStruct
对象作为其值。
目前,为了检查传入的MyStruct
对象是否与地图中的任何对象匹配,我会对unsigned long long
变量(比如序列号)进行查找。
事情是,我现在必须额外检查源地址和目标地址以及地图中的序列号。
将源,目标地址和序列号存储为地图中的键并且能够检索值(MyStruct
对象)的最佳方法是什么?
答案 0 :(得分:1)
关于实际问题:
存储源,目标地址和的最佳方式是什么? 序列号作为地图中的键,并能够检索该值 (MyStruct对象)?
您可以创建一个包含上述字段的新struct
。有点像。
请记住,map
依赖于std::less<KeyType>
,默认为operator<
,因此如果您使用自定义struct
,则应通过实施operator<
来提供自定义struct MyKey{
Adress addr;
Destination dest;
SeqNum seq;
};
inline bool operator< (const MyKey& lhs, const MyKey& rhs){ /* something reasonable */ }
std::map<MyKey,MyStruct> myMap;
/* Or */
struct CmpMyType
{
bool operator()( MyKey const& lhs, MyKey const& rhs ) const
{
// ...
}
};
std::map<MyKey,MyStruct,CmpMyType> myMap;
或者通过提供功能对象(source):
std::map<std::tuple<int,string,demo> ,int> a;
a.emplace(std::make_tuple(1,"a",demo {5}),1);
a.emplace(std::make_tuple(1,"a",demo {6}),2);
a.emplace(std::make_tuple(1,"b",demo {5}),3);
a.emplace(std::make_tuple(2,"a",demo {5}),4);
if(a.count(std::make_tuple(2,"a",demo {5}) )){
cout << a[std::make_tuple(2,"a",demo {5})] << endl;
}
if(a.count(std::make_tuple(2,"c",demo {5}))){
cout << a[std::make_tuple(2,"a",demo {5})] << endl;
} else {
cout << "Not there..." << endl;
}
如果创建它困扰您,请使用tuple
作为关键,例如demo):
{{1}}