2013-01-07 66 views
1
if (mySharedState -> liveIPs -> find(flowStats -> destinationIP) != mySharedState -> liveIPs -> end()){ 
    //do something 
} 

unordered_map <uint32_t, std::string> *liveIPs;指針和方法的使用奇怪

我從來沒有見過這樣的用法(找到(...)結束()的使用)。有人能幫助我瞭解它返回的內容嗎? (這是C++的方式代碼)

+4

閱讀[文件](http://en.cppreference.com/w/cpp/container/map/find),你就會明白爲什麼。 – chris

+0

我可以看到什麼查找方法。你發的不是我要求的? – smttsp

回答

4

您可以使用此技術來檢查,如果容器包含的價值。

find()返回對應於該值的迭代器,end()返回容器末端後的迭代器1,該容器用於發出「未找到值」的信號。

+0

是的,我可以看到,但我要求它返回什麼,一個布爾值? – smttsp

+1

@tusherity再次閱讀:「找到()返回一個迭代器** **」 – WhozCraig

+0

@tusherity它本質上是一個'= B'返回一個布爾值! (a == find(),b == end()) –

1

函數找到(值)和結束()是用於調用存儲各種類型(名單,集,向量,地圖...)的元素「容器」的類的成員函數。有更多關於容器的信息here

兩個成員函數返回一個迭代(樣的指針)的容器元素。你可以閱讀迭代器here

抽象地講,發現(值)會給你一個容器,它等於值的元素的位置。 end()將返回一個迭代器指向容器的末尾(最後一個元素後面的位置)。

所以你的情況:

// from mSharedState get liveIPs (a container storing IPs) 
// and find the element with value destinationIP 
mSharedState->liveIPs->find(flowStats->destinationIP) 

// check if the iterator returned by find(flowStats->destinationIP) is different 
// then the end of the liveIPs contatiner 
!= liveIPs->end() 

所以,「//做一些事情」將如果容器liveIPs保存與價值destinationIP元素執行。因爲find(value)和end()通常是容器的成員函數,所以我認爲你顯示的代碼片段是STL一致容器的成員函數的定義的一部分(可能是一些用戶定義的容器符合STL容器接口,提供find(value)和end()作爲成員函數)。