将用户定义的类存储在地图中,并将该成员作为键

时间:2013-10-21 03:39:38

标签: c++ map struct

这是我想要完成的,我想创建一个用户定义的项目结构,然后使用项目名称作为键将其存储在地图中。我可能是一个菜鸟,但有人可以告诉我我做错了什么,当我尝试编译程序时它会吐出一堆奇怪的输出,所以看起来它不起作用,我该怎么办?

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 ;

2 个答案:

答案 0 :(得分:1)

您可能想要切换它:

map<project, string> provec;

到此:

map<string, project> provec;

正确?

在这种情况下,您将项目名称映射到项目本身。

答案 1 :(得分:1)

您可以使用std :: set并提供一个特殊的比较器来使用proname作为键:

typedef std::set<project, []( const project &p1, const project &p2 ) { return p1.proname < p2.proname; } > provec;

或者您可以覆盖运算符&lt;为您的班级project。此解决方案的缺点是您必须创建临时project才能进行查找。

另一种解决方案是使用boost::multi_index

使用std :: map的解决方案的问题:

  • 数据复制
  • 没有什么可以阻止你在地图中为关键字段和字段代名设置不同的咒语,或者稍后替换该对象,因此更容易出错。