具有包含数组的对的stl映射

时间:2016-01-12 06:32:16

标签: c++ stl stdmap std-pair

我需要帮助来实现设计:

我在项目中声明了MessageID(整数宏)。每个MID与一个或多个源相关联(枚举0-19)。通过检查MID的每个源,我想调用不同的函数。我遵循以下方法:

   typedef std::pair<int,unsigned int *> MIDPair; 
            - this binds MID(int) with sources(array of int)

   typedef std::map<MIDPair,fpPtr> mapRSE; 
            - carries MIDpair with funtion pointer

最初我创建了不同的对(mid和具有适用源的数组)并使用适用的函数指针在map中推送它们。当我收到任何MID时,我会检查当前的来源并调用相应的功能。

如果我对所选择的cotainers的方法是正确的,或者建议我采用任何其他方法,请告诉我

1 个答案:

答案 0 :(得分:0)

您的方法可行:

  • 您需要使用lower_bound或upper_bound在地图中查找具有该MID值的键,但您不一定要在该位置拥有所需的源枚举值:您&# 39; ll必须使用该MID递增所有键,检查源值

    • 您可以通过源整数数组(如果保持排序)使用二进制搜索

效率可能并不太差,但确实涉及相当多的繁琐编码。

您可能会发现使用像以下容器更简单:

std::map<int, std::map<unsigned, fpPtr>> mapRSE;

然后,您可以致电mapRSE[mid][source]()(或使用.at.find,如果您不想在意外密钥上崩溃。)