我声明了一个映射,如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