2011-09-09 33 views
-1
//employee is class with public members salary and nname 
    int main() 
    { 
     map<int,employee> employees; 

     employee e1; 
     strcpy(e1.nname,"aaa"); 
     e1.salary=25000; 

     employee e2; 
     strcpy(e2.nname,"ccc"); 
     e2.salary=26000; 
     employees[1]=e1; 
     employees[2]=e2; 

     employee e3; 
     strcpy(e3.nname,"bbb"); 
     e3.salary=26000; 

     employees[5]=e3; 

     employee ee; 

     cout<<employees.size()<<endl; 

     for(int i=0;i<employees.size();i++) 
     { 
      ee=employees[i]; 
      cout<<ee.nname<<endl; 
     } 

    o/p:  3    -  //so i=3  displays employees[0],1,2,3 
      aaa    -  //i= 
      ccc    - 
          -  //2 blank lines 
          - // <---why blank line cming ,ok cause no data but why it 
      bbb    -  //executed 4th and 5th time and we got 
            // employees[5] -----    bbb????? 
            //when i printed value of"i" i got from 0 to 5!!! 
-------------- 
can any1 explain thanx in advance 
+0

嗯。有沒有搞錯? –

+0

@lokesh:請提出問題。 –

+1

問題是在代碼註釋中,它不是很好的格式,但它是一個正確的問題。 –

回答

3

您顯示employees[i],其中i= 0,1,2,3,4,5
爲什麼在進入for-loop之前顯示6條目如果employees.size() == 3

答案是,當i==0,你要在地圖上添加一個條目employees[0]。 (這是因爲map::operator[]返回一個引用,如果該條目不存在,則創建一個)。

所以,現在,employees.size()等於4 調用employees[1],[2]不改變地圖,但由於大小爲4,您也訪問employees[3],這反過來又增加了地圖(等了employees[4])的條目。
當您到達employees[5]時停止,因爲它存在於地圖中並且地圖不再增長。

如果要遍歷映射條目,請使用迭代器。

map<int, employee>::iterator it; 
for (it = employees.begin(); it != employees.end(); ++it) 
{ 
    ee = it->second; 
    cout<< ee.nname << endl; 
} 

PS-請讓你的代碼可讀。

+0

問題thanx alot.new用戶,並做到了這一點,將盡量使代碼更格式化 – lokesh

1

好,讓我們試試這個具有更加可控例如:

#include <iostream> 
#include <map> 
#include <string> 
using namespace std; 

int main() 
{ 
     map<int,string> db; 

     db[1] = string("index = 1"); 
     db[2] = string("index = 2"); 
     db[5] = string("index = 5"); 

     for (size_t i = 0; i < db.size(); i++) 
     { 
       cout << i << " : " << db[i] << endl; 
       cout << "size is : " << db.size() << endl; 
     } 

     return 0; 
} 

現在,這裏的問題是,當你訪問db[0]db[3]db[4],你實際上是添加元素到地圖中。

0 : 
size is : 4 
1 : index = 1 
size is : 4 
2 : index = 2 
size is : 4 
3 : 
size is : 5 
4 : 
size is : 6 
5 : index = 5 
size is : 6 

您可能還有其他問題。你的班級員工可能有一個破壞的默認構造函數,它不會正確初始化字符串屬性。

+0

Thanx ....嘿,你可以告訴什麼是破碎的構造....你的意思是我還沒有定義構造函數,所以它會給垃圾值???請解釋.....我剛開始C++:D – lokesh