2015-07-28 93 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

然後傳遞一個字符串指針並將它們進行比較。 –