【问题标题】:stl map having pair which contains array具有包含数组的对的 stl 映射
【发布时间】:2016-01-12 06:32:15
【问题描述】:

我在实施设计时需要帮助:

我在项目中声明了 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 时,我会检查当前来源并调用相应的函数。

请让我知道我的方法在所选容器上是否正确/或建议我任何其他方法

【问题讨论】:

    标签: c++ stl stdmap std-pair


    【解决方案1】:

    你的方法是可行的:

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

      • 您可以在源整数数组中使用二进制搜索(如果您保持它们的排序)

    这在效率方面可能并不算太差,但确实涉及大量繁琐的编码。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-04
      相关资源
      最近更新 更多