std::map<int,int> mapy;
++mapy[5];
Run Code Online (Sandbox Code Playgroud)
假设mapy[5]永远是1 是安全的吗?我的意思是,mapy[5]在'++'之前总是会得到默认值0,即使没有显式声明,就像我的代码一样?
假设我有一个std::map<int, int>,这样做是否安全?
std::map<int, int> m_map;
m_map[0] += 1;
Run Code Online (Sandbox Code Playgroud)
如果0我执行此操作时地图中不存在该键,它将如何知道要添加的值1?
我希望std :: map通过执行=而不是+=在值在地图中创建新条目的情况来处理此问题.这将使我不必这样做:
std::map<int, int>::iterator it = m_map.find(0);
if(it != m_map.end()) {
it->second += 1;
}
else {
m_map[0] = 1;
}
Run Code Online (Sandbox Code Playgroud) 相关问题:std :: map内置类型的默认值 - 细微的区别是我想要知道值是初始化0还是垃圾,我想指定一个"构造函数".我甚至不关心它是否涉及类定义的开销,我只想要一个干净的"特殊"基本类型.即使是语法黑客也会这样做.非基本类型很容易做到这一点,它是构造函数的全部工作.
我想要一个哈希映射,unordered_map<void *, int>但要将其所有值默认初始化为-1而不是0或者垃圾.这是因为零是一个有效的索引,我宁愿使用肯定无效的值进行默认初始化.
我想我可以看到一些草率的方法:
struct minus1 {
int i;
minus1() i(-1) {}
};
unordered_map<void*, minus1>
Run Code Online (Sandbox Code Playgroud)
但我不喜欢这个,因为我必须使用.i访问int,它实际上只需要一个int.
好的,也许我可以让我的地图处理这个:
struct PointerToIDHash {
std::unordered_map<void *, int> h;
PointerToIDHash() {
// ctor is powerless to affect the initialized values of future insertions into h
}
};
Run Code Online (Sandbox Code Playgroud)
嗯,废话现在我也有.h.Joey:嗯.我可以从模板继承吗?(听起来很可怕,但如果它可以被拉掉,这可能是一个干净的方式)
我怎样才能创建一个透明地像int一样的类型,但总是被初始化为-1?
我更愿意知道如何使用和不使用C++ 11.
以下代码似乎始终遵循true分支.
#include <map>
#include <iostream>
class TestClass {
// implementation
}
int main() {
std::map<int, TestClass*> TestMap;
if (TestMap[203] == nullptr) {
std::cout << "true";
} else {
std::cout << "false";
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它是否为未初始化的指针定义了行为nullptr,或者是我的编译器的工件?
如果没有,我如何确保以下代码的可移植性?目前,我正在使用类似的逻辑来返回正确的单例实例log file:
#include <string>
#include <map>
class Log {
public:
static Log* get_instance(std::string path);
protected:
Log(std::string path) : path(path), log(path) {};
std::string path;
std::ostream log;
private:
static std::map<std::string, Log*> instances;
};
std::map<std::string, Log*> Log::instances = std::map<std::string, Log*>();
Log* Log::get_instance(std::string path) …Run Code Online (Sandbox Code Playgroud) 我一直以为代码如下
std::map<int, int> test;
std::cout << test[0] << std::endl;
Run Code Online (Sandbox Code Playgroud)
会打印随机值,因为它会在map中创建单位化值.但是,事实证明,创建的int实际上总是初始化为零,并且标准内置类型在某些情况下也是零初始化的.
问题是:当对标准类型(int/char/float/double/size_t)执行零初始化时?我很确定,如果我int i;在不知名的地方宣布,它将包含随机数据.
PS问题是关于C++ 03标准.问题的原因是,现在我不再确定何时必须为内置类型(如int/float/size_t)提供初始化,或者可以安全地省略它.
这段代码似乎运行良好,默认值为they value_type(int)为0; 它适用于所有情况吗?
std::map<std::string,int> w;
for (const auto& t: str)
w[t]++;
Run Code Online (Sandbox Code Playgroud)
双倍呢?地图?默认为0.0?