使用map,iterator和nullptr

时间:2015-07-28 10:32:41

标签: c++

简介

我正在尝试创建一个幂等函数。 为此,我检查地图上是否有内容,之后可能需要添加内容。

代码

  std::map<char,int> mymap;
  std::map<char,int>::iterator it;

  mymap['a']=50;

  it = mymap.find('a');
  int value = it->second;

问题1 我如何知道it值是否不是null?如何获得迭代器的值?

问题2 我如何知道it->second值是否不是null

问题3 我如何返回null值并将其与std::string / container进行比较?

示例问题3

if(get_client_from_map(id) == nullptr){
   // do anything
}else{
  // code anything here too
}
  

注意:get_client_from_map(id)返回(it-&gt; second)结果,它可以是std :: string或null / nullptr。

2 个答案:

答案 0 :(得分:1)

问题1我如何知道它的值是否为空?如何获得迭代器的值?

如果您查看了std :: map.find http://www.cplusplus.com/reference/map/map/find/的文档,如果找不到具有指定键的元素,您将看到它返回end()

问题2我如何知道它是否&gt;第二个值不为空?

由于您使用int作为映射值,因此该值永远不会为null,与[]一起使用时,ints在地图中初始化为零,否则只需检查它if(it->second) { // not null}

问题3如何返回空值并将其与std :: string进行比较?

使用空字符串。

答案 1 :(得分:1)

  

我如何知道它的值是否为空?如何获得迭代器的值?

如果找不到,std::map::find将返回std::map::end()

  

我如何知道它是否&gt;第二个值不为空?

它不能是nullptr,因为它是int

  

我如何返回null值并将其与std :: string / container进行比较?

如果您想返回nullptr,则值类型必须是某种指针,例如int *std::string *