2013-10-21 37 views
0

這就是我試圖完成的任務,我想創建一個用戶定義的項目結構,然後將其存儲在使用項目名稱作爲關鍵字的地圖中。我可能是一個noob,但有人可以告訴我什麼即時做錯了,當我嘗試編譯程序它吐出一堆奇怪的輸出,所以它看起來不工作,我該怎麼辦?將用戶定義的類存儲在地圖中,成員爲關鍵

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 ; 
+1

難道你不是這個意思嗎 - 字符串(項目名稱)作爲鍵,'項目'實例作爲值?寫作沒有多大意義。 –

+1

如果你真的想把項目映射到像這樣的名字,只需將名爲'name'的成員添加到項目類中,但你已經有了 – perreal

回答

1

你可能想關掉這個:

map<project, string> provec; 

這樣:

map<string, project> provec; 

吧?

在這種情況下,您會將項目名稱映射到項目本身。

+1

好了,所以我得到了它的工作,我的錯誤是我翻轉了鍵和映射值 – notamathwiz

1

您可以使用std ::設置,而不是提供一個比較特殊的使用proname作爲重點:

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

或者你可以重寫操作<您project類。該解決方案的缺點是,您將不得不創建臨時文件project來進行查找。

另一種解決方案是使用boost::multi_index

問題與性病::地圖解決方案:

  • 數據重複
  • 沒有阻止你把不同的叮咬的關鍵和現場proname在地圖上,或者稍後替換該對象,所以它更容易出錯。
相關問題