我聲明瞭一個映射,如map<string,int> registers
。如何將其設置爲特定的大小,以及如何將其所有值設置爲零,以便稍後可以在映射的值中插入值?如何在C++中設置大小並將映射初始化爲零
2
A
回答
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;
}
相關問題
- 1. 初始化映射並將類成員變量設置爲在C++中爲空?
- 2. 如何初始化一個arrayList爲固定大小並將其分配給零
- 3. 如何設置TreeViewer的初始大小?
- 4. 用C++初始化一個映射
- 5. 在C/C++中將兩個二維數組初始化爲零
- 6. 在片段中初始化映射
- 7. 如何設置初始化var c#?
- 8. 初始化矢量爲零C++/C++ 11
- 9. 初始化大小
- 10. 如何將會話變量的初始值設置爲'零'?
- 11. 初始化for循環中的映射
- 12. 在VS 2013中用初始值設定項列表初始化映射圖
- 13. 初始化映射時爲什麼不能省略大括號?
- 14. 的Objective-C:初始化變量爲零
- 15. 成語初始化C++類爲零
- 16. 靜態C++映射初始化錯誤C2552:非聚合無法用初始值設定項列表初始化
- 17. 如何在Python中設置字典的初始大小?
- 18. 如何在iOS中設置初始大小UIMapkit
- 19. 如何在QSplitter中設置QTreeView的初始大小?
- 20. 如何在Java中設置初始窗口大小OpenGL
- 21. 如何在scala中表示未初始化的(aka null)映射
- 22. 如何爲reference_wrapper的STL容器設置初始大小?
- 23. 如何在後續階段中將類型存儲在初始化映射中
- 24. 將字段值初始化爲零?
- 25. 未初始化列表的大小C#
- 26. 初始化或不初始化JPA關係映射?
- 27. C結構成員未在Objective-C中初始化爲零?
- 28. 如何在Objective C中設置未初始化的值?
- 29. 爲什麼int數組在C++中未初始化爲零?
- 30. 如何初始化Go中的結構中的嵌套映射?
你爲什麼要這麼做?爲什麼不簡單地使用'm [「abc」] = 1;'? – Naveen 2011-06-04 05:20:43
所以我不能使用循環或東西,而不是寫地圖的所有內容 – Shadi 2011-06-04 05:22:09
什麼你想要初始化爲零?地圖的默認構造函數創建空地圖。你可以通過插入元素(比如'm [「str1」] = 0'或m.insert(std :: map :: value_type(「str2」,0))來增加地圖的大小。 ')。 –
2011-06-04 05:27:56