首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检查地图中是否存在匹配?

如何检查地图中是否存在匹配?
EN

Stack Overflow用户
提问于 2016-06-13 15:58:57
回答 5查看 81关注 0票数 1

我想知道是否分配了一个匹配的m1[0]。我用这种方法尝试它,它输出"1",这似乎是正确的。这是正确的方法吗?或者有更好的解决方案?

代码语言:javascript
运行
复制
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;
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-06-13 16:01:45

您不是在检查键是否存在,而是检查映射到键的值是否为NULL (例如,对于char,为'\0' )。

您应该使用std::map::find

代码语言:javascript
运行
复制
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,这就是为什么您的代码看起来是正确的。

票数 3
EN

Stack Overflow用户

发布于 2016-06-13 16:01:01

使用m1.find(key),如果没有结果,它将返回m1.end()

此外,您可以使用m1.at(key)而不是m1[key],如果没有这样的元素,它将抛出std::out_of_range异常。

票数 2
EN

Stack Overflow用户

发布于 2016-06-13 16:00:38

使用map::find并检查它是否不等于map::end

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37784469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档