我想知道是否分配了一个匹配的m1[0]
。我用这种方法尝试它,它输出"1",这似乎是正确的。这是正确的方法吗?或者有更好的解决方案?
int main(int argc, char const *argv[]){
map<int, char> m1;
//cout << m1[0] << endl;
if(m1[0] == NULL) cout << "1" << endl;
else cout << "0" << endl;
}
发布于 2016-06-13 08:01:45
您不是在检查键是否存在,而是检查映射到键的值是否为NULL
(例如,对于char
,为'\0'
)。
您应该使用std::map::find
auto it = m1.find(0);
if (it != m1.end()) std::cout << "0: " << it->second << "\n";
else cout << "Not found." << endl;
注意,如果键不存在,std::map::operator[]
将插入一个value_type
对象。在这种情况下,该值将是value-initialized,对于char
,它将是零初始化的,即'\0'
。所以m1[0]
将首先执行插入,然后m1[0] == NULL
将返回true
,这就是为什么您的代码看起来是正确的。
发布于 2016-06-13 08:01:01
使用m1.find(key)
,如果没有结果,它将返回m1.end()
。
此外,您可以使用m1.at(key)
而不是m1[key]
,如果没有这样的元素,它将抛出std::out_of_range
异常。
https://stackoverflow.com/questions/37784469
复制