2015-02-06 127 views
0

我開始學習C++中的地圖,我正試圖理解它們。我以爲我做了,但後來我參加了這個練習,並不知道如何管理它。C++地圖練習

輸入: n-員工人數;用n行輸入 ,輸入員工名字,姓氏和工資。

輸出:用兩行輸出最低工資員工的姓名和工資,以及工資最高的員工的姓名,工資。

順便說一句,這不是一項功課。我只是一個試圖通過自己學習編程的學生。

地圖顯然非常重要,可能有很多地方可以找到這個問題很有幫助。

現在,我不知道如何使名字&姓氏與工資之間的關係。 這就是我所做的,但這是錯誤的,我如何在地圖中輸入值,然後使鍵和映射值之間的關係以輸出所需的輸出? :

int n; 

cin>>n; 

    long double sales[n],salary[n]; 
    string name[n],surname[n]; 
    map<long int,string,string>m(n); 
    long int s; 
    for(int i=0;i<n;i++) 
{ cin>>name[i]>>surname[i]>>sales[i]; 
    s=200+0.06*sales[i]; 
    m.push_back(s); 
} 

請大家幫忙。

+0

問題陳述不需要使用地圖。解決這個問題也不是特別有幫助。另外 - 你可能已經意識到了這一點,但你的代碼完全是廢話,甚至不是有效的。 – 2015-02-06 04:16:18

+0

是的,我知道我的代碼是無稽之談,但我試過。我想用地圖來解決這個練習,以便練習。你有什麼建議,如果不是地圖?你能告訴我這是怎麼解決的地圖? – gm98 2015-02-06 09:16:36

回答

0

您已經啓動了它相當不錯,但有幾個重要的事情:

1)地圖是兩種類型:鍵和值。如果你需要比在「價值」只是一個值,爲什麼不對其進行聚合:

struct Employee { string name; string surname; long double sale; }; 
std::map<long int, Employee> m; 

2)如果你想插入在關鍵值,使用operator[]

Employee e; cin >> e.name >> e.surname >> e.sale; 
... calculate s... 
m[s] = e; 

3)你既不需要將銷售,薪水,姓名和姓氏定義爲數組,也不是正確的。 declration中的索引必須是恆定的,否則這是一個VLA(存在於C99標準中,但不在任何C++中,充其量只能作爲gcc擴展使用)。無論如何,您將所有數據都保存在地圖中,因此您只需使用變量作爲臨時存儲。

4)默認情況下,您的值越來越排序。所以最低和最高只是地圖的第一個和最後一個元素。