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

stl map having pair which contains array

本文关键字:映射 stl 数组 包含      更新时间:2023-10-16

我需要帮助来实现一个设计:

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

请让我知道我的方法对所选的合作伙伴是否正确/或建议我任何其他方法

您的方法是可行的:

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

    • 可以使用二进制搜索源整数数组(如果对它们进行排序)

就效率而言,这可能还不错,但确实涉及到相当多的繁琐编码。

你可能会发现使用这样的容器更简单

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

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