具有包含数组的对的stl映射
stl map having pair which contains array
我需要帮助来实现一个设计:
我在项目中声明了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
)。
相关文章:
- C++:在子类中扩展静态 STL 容器/映射成员?
- 使用无序映射在STL中存储键值对
- STL映射比较器能否以某种方式获取指向映射本身的指针?
- 在 c++ stl 映射中,删除具有重复值的条目
- C++ STL 映射同时更新所有值
- 遍历 STL 映射(集/多集)的最佳方法,同时元素可能会在循环期间被删除并重新插入?
- 如何通过键和值以及在C 中的结果映射中比较两个地图?我们有任何STL API吗?
- 无法将元素添加到 STL 映射
- 为什么不能在STL映射中插入值
- 在 stl 映射和列表 (c++) 上进行迭代的泛型循环
- 未签名的char数组到stl ::映射或其他容器中的键
- 整数和元组的静态 STL 映射返回 0
- C++ STL 比较映射找不到(运算符==)
- 指向类的指针的 STL 映射的 SWIG 类型图
- 将 STL 映射存储到 Boost ConstBufferSequence 中
- 如何在下一次函数调用中使用 STL 映射擦除从最后一个位置
- 如何使用密钥 2 更新 STL 映射键 1 并将值复制到键 2 中
- 为什么当代码尝试在 STL 映射中查找键时出现分段错误
- 快速插入STL映射
- 在C++中,如何在映射STL中插入键作为类