将用户定义的类存储在映射中,并将成员作为键
storing a user defined class in a map with the member as the key
这就是我想要实现的,我想创建一个用户定义的项目结构,然后使用项目名称作为键将其存储在映射中。 我可能是一个菜鸟,但有人可以告诉我我做错了什么,当我尝试编译程序时,它会吐出一堆奇怪的输出, 所以看起来它不起作用,我该怎么办?
map<project, string> provec;
project current;
cout << "Enter your project name: ";
current.proname = getFileContents(cin);
cout << "Enter a description: ";
current.prodesc = getFileContents(cin);
cout << "How long until deadline: ";
current.protime = getFileContents(cin);
provec.insert(pair<project, string> ( current, current.proname ));
cout << endl << "You created a new project: " << current.proname
<< endl << "Project description: " << current.prodesc ;
你可能
想切换这个:
map<project, string> provec;
对此:
map<string, project> provec;
右?
在本例中,您将项目的名称映射到项目本身。
你可以改用std::set,并提供一个特殊的比较器来使用proname作为键:
typedef std::set<project, []( const project &p1, const project &p2 ) { return p1.proname < p2.proname; } > provec;
或者,您可以覆盖类project
的运算符<。此解决方案的缺点是您必须创建临时project
才能进行查找。
另一种解决方案是使用boost::multi_index
标准::地图解决方案的问题:
- 数据复制
- 没有什么能阻止你在映射中为键和字段 proname 放置不同的刺痛,或者稍后替换该对象,因此更容易出错。
相关文章:
- 将函数类成员映射到类本身内部
- 添加静态constexpr成员是否会更改结构/类的内存映射
- 整数键映射到头文件中的成员函数指针
- C++预处理会生成变量成员、资源库和映射
- 迭代嵌套映射与范围为循环:没有名为"first"的成员
- C++:在子类中扩展静态 STL 容器/映射成员?
- 用于对项目进行分组并将单个项目映射到其他组成员的数据结构
- C++-将对象(如字符串)映射到表中成员函数的正确方法
- 重构MFC消息映射以包括完全限定的成员函数指针
- gdb映射显示不正确的成员变量
- c++ 嵌套结构映射找不到成员
- 尝试通过指针映射访问类成员
- 映射类的数据成员
- std::映射键作为模板化结构与枚举成员
- 为什么擦除C++映射类成员中的值?
- 如何创建<id,成员函数>的映射?
- 向量映射作为实例成员的C 地图
- 如何使用成员函数映射参数包?(非恢复性,折叠前表达式)
- 删除类成员映射时,映射析构函数stl_map.h崩溃
- 在类定义中初始化静态常量成员映射<>