2011-06-04 292 views
2

我聲明瞭一個映射,如map<string,int> registers。如何將其設置爲特定的大小,以及如何將其所有值設置爲零,以便稍後可以在映射的值中插入值?如何在C++中設置大小並將映射初始化爲零

+0

你爲什麼要這麼做?爲什麼不簡單地使用'm [「abc」] = 1;'? – Naveen 2011-06-04 05:20:43

+0

所以我不能使用循環或東西,而不是寫地圖的所有內容 – Shadi 2011-06-04 05:22:09

+2

什麼你想要初始化爲零?地圖的默認構造函數創建空地圖。你可以通過插入元素(比如'm [「str1」] = 0'或m.insert(std :: map :: value_type(「str2」,0))來增加地圖的大小。 ')。 – 2011-06-04 05:27:56

回答

5

如何:

std::map<std::string, int> registers; // done. 
             // All keys will return a value of int() which is 0. 


std::cout << registers["Plop"] << std::endl; // prints 0. 

這工作,因爲即使registers是空的。運算符[]會將鍵插入到映射中,並將其值定義爲該類型的默認值(在此情況下,整數爲零)。

所以子表達式:

registers["Plop"]; 

等同於:

if (registers.find("Plop") == registers.end()) 
{ 
    registers.insert(make_pair("Plop", 0)); 
} 
return registers.find("Plop").second; // return the value to be used in the expression. 

這也意味着下正常工作(即使你以前沒有定義的鍵)。

registers["AnotherKey"]++; // Increment the value for "AnotherKey" 
          // If this value was not previously inserted it will 
          // first be inserted with the value 0. Then it will 
          // be incremented by the operator ++ 

std::cout << registers["AnotherKey"] << std::end; // prints 1 
2

我怎樣才能將其設置爲特定的大小 ,我怎麼能設置的所有值 零

這可能是遠遠超過一個語法概念的問題/」如何「的問題。是的,確實如此,只要通過給定鍵初始訪問,相應的值將被創建,並且默認設置爲0,如許多海報/評論者所說的。但是,您使用不符合一個重要的一句話是:

所有值

它沒有值開始,如果你用它做,以此爲前提編程一個人可能會導致概念錯誤。

通常情況下,習慣於找到鑰匙是否在您的地圖中,如果沒有,則嘗試對其進行初始化。儘管這看起來可能只是開銷,但明確地做這樣的事情可能會防止將來發生概念性錯誤,特別是當您嘗試訪問某個鍵的值而不知道它是否已經在地圖中時。

單行摘要:你不想自己初始化這個值,而不是讓map爲任何給定鍵的值賦值它的默認值嗎?

因此,你可能想使用的代碼是:

if(mymap.find(someKey) == mymap.end()) 
    { 
     // initialize it explicitly 
     mymap[someKey] = someInitialValue; 
    } 
    else 
    { 
     // it has a value, now you can use it, increment it, whatever 
     mymap[someKey] += someIncrement; 
    } 
相關問題