1
if (mySharedState -> liveIPs -> find(flowStats -> destinationIP) != mySharedState -> liveIPs -> end() ){
     //do something
}

unordered_map <uint32_t, std::string> *liveIPs;

我从未见过这样的用法(find(...)end()的用法)。有人可以帮我了解它返回的内容吗?(顺便说一下,这是c++代码)

4

2 回答 2

4

您使用此技术来检查容器是否包含该值。

find()返回与该值对应的迭代器,end()返回容器末尾的迭代器 1,用于表示“未找到值”。

于 2013-01-07T09:11:26.047 回答
1

函数 find(value) 和 end() 是称为“容器”的类的成员函数,用于存储各种类型的元素(列表、集合、向量、映射......)。这里有更多关于容器的信息。

两个成员函数都返回一个指向容器元素的迭代器(一种指针)。您可以在此处阅读有关迭代器的信息。

抽象地说,find(value) 将为您提供元素在容器中等于该值的位置。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 的元素,“//do something”将被执行。

由于 find(value) 和 end() 通常是容器的成员函数,我认为您显示的代码片段是 STL 符合容器的成员函数定义的一部分(可能是一些用户定义的容器符合STL 容器接口,提供 find(value) 和 end() 作为成员函数)。

于 2013-01-07T09:24:19.743 回答