将任何类型或结构存储在std::映射中
Storing any type or struct in an std::map
我正在用C++编写一个基于主题的发布/订阅系统。我的通用"Event"类有三个部分:
- 事件类型(std::string)
- 实体ID(unsigned int)-这是用于游戏引擎的
- 事件数据(std::map<std::string,???>)
为了填充"事件数据"映射,我需要能够存储任何数据类型或结构,如int、string或Vector3(struct),以给出一些示例。我该怎么做?或者,也许有更好的方法来做到这一点。。。
另一方面,事件类型和数据名称最好使用char*还是字符串?
尝试升压:有吗?
对于您的事件类型,为什么要使用字符串?std::映射是按键值从低到高的顺序存储的。这意味着在内部,您将对字符串进行排序。一开始就尽量简单。使用枚举,这应该会让你的地图更快,尤其是考虑到它们将成为通知系统的基础。
最后,你不想使用char*,因为地图不会像你预期的那样工作:
char* key1 = "Hi";
char* key2 = "Hi";
unsigned int id;
std::map< char* ,unsigned int > mymap;
mymap.insert( std::pair<char*,unsigned int>( key1, id ) );
mymap.insert( std::pair<char*,unsigned int>( key2, id ) ); //you've just created a duplicate entry
原因是key1和key2将具有不同的地址,即使它们是相同的字符串。
相关文章:
- C++匿名结构作为std::映射值
- 如何从存储在std::映射中的std::集中删除元素
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 将唯一指针插入std::映射
- 重载std::映射不同的密钥类型
- std::映射,只有move构造函数可用
- std::映射服装比较函数和函数/lambda错误
- std::映射导致插入时出现C2664错误
- 将从std::映射中获取的std::pair引用传递给接受std::对引用的函数
- std::映射键作为模板化结构与枚举成员
- std ::映射以构造为钥匙
- 在锁定下清除STD ::映射,而移动到临时对象
- 计算向量的std ::映射为键的值,并将双倍作为值
- 写入/读取 std::映射到二进制文件需要运算符
- 我如何正确地为std ::映射分配内存
- 如何打印包含整数和整数集的std::映射
- 在字符串的std::映射中找到编译错误,long
- 将std ::映射复制到std ::对向量
- 使用std ::映射的键的部分匹配
- 遍历std ::映射,效果少于迭代器之间的比较