我有一个std :: map,我想添加一个有效的键以便稍后迭代它,但是没有给出任何值(它将在稍后的迭代过程中给出).
这就是我现在这样做的方式:
std::vector<std::string> valid_keys;
//Fill... Then :
std::map<std::string, float> map;
for(size_t i = 0 ; i < valid_keys.size() ; ++i) {
/*I don't want to do that because in fact I don't use a float type*/
map[valid_keys[i]] = 0.f; //<-
}
//Using :
for(std::map<std::string, float>::iterator it = map.begin() ; it != map.end() ; ++it) {
it->second = 0; //Dummy
}
Run Code Online (Sandbox Code Playgroud)
我该怎么办?
先谢谢了.
Tro*_*our 11
我不完全确定你的意思是"没有给出任何价值",但如果你的意思是没有明确地分配一个值,那么就这样做
map[valid_keys[i]];
Run Code Online (Sandbox Code Playgroud)
这仍然有效,即如果之前没有该键,则它会在地图中创建一个新条目.在operator[]
刚刚返回refernce的值,这样就可以分配一个新的价值,但记住它已经被默认构造.
另一方面,如果你的意思是你想要表示没有有意义的价值,并且它可能会或者可能不会随后收到有效值,那么请参阅@ UncleBens`回答.
我想可以帮助你的东西是Boost.Optional.
#include <boost/optional.hpp>
#include <map>
class CantConstructMe
{
CantConstructMe() {}
};
int main()
{
std::map<int, boost::optional<CantConstructMe> > m;
m[0];
}
Run Code Online (Sandbox Code Playgroud)
缺少可用的默认构造函数不是问题,默认情况下optional
将为空.