将多个值存储为地图中的键的最佳方法是什么?

时间:2014-08-25 03:42:47

标签: c++ map

所以我目前有一张地图,其中包含unsigned long long作为键,MyStruct对象作为其值。

目前,为了检查传入的MyStruct对象是否与地图中的任何对象匹配,我会对unsigned long long变量(比如序列号)进行查找。

事情是,我现在必须额外检查源地址和目标地址以及地图中的序列号。

将源,目标地址和序列号存储为地图中的键并且能够检索值(MyStruct对象)的最佳方法是什么?

1 个答案:

答案 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}}