2015-07-28 82 views
-3

介绍使用地图,迭代器和nullptr

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

代码

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->第二)结果,可以的std :: string或空/ nullptr。

+0

'map :: find'返回'map :: end()'如果找不到值,所以你想'if(it!= mymap.end())cout <<“found”; else cout <<“not found”;' – nwp

+0

1.在[std :: map文档](http://www.cplusplus.com/reference/map/map/)中解释2.“int”不能为NULL '3.返回一个std :: string *并检查NULL。 – namezero

+0

现在我明白了,谢谢。 – urb

回答

1

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

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

我如何知道它是否 - >第二个值不为空?

它不能是nullptr,因为它是一个int

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

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

+0

不是推荐返回nullptr? – urb

+0

@Urbester它不能。如果你想使用'nullptr',值类型必须是某种类型的指针,比如'int *'或者'std :: string *'。 – songyuanyao

+0

不要返回'nullptr',而应考虑使用希望很快成为部分标准的['std :: optional'](http://en.cppreference.com/w/cpp/experimental /可选的)。如果你的编译器还没有它,[Boost会帮助你](http://www.boost.org/doc/libs/1_58_0/libs/optional/doc/html/index.html)。 – ComicSansMS

1

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

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

问题2我如何知道它是否 - >第二个值不为空?

由于您使用int作为映射值,该值永远不能为null,整数都为零[]使用时,否则,就检查它if(it->second) { // not null}初始化的地图。

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

为此使用空字符串。

+0

我不能比较nullstr与容器? – urb

+0

然后传递一个字符串指针并将它们进行比较。 –