if (mySharedState -> liveIPs -> find(flowStats -> destinationIP) != mySharedState -> liveIPs -> end() ){
//do something
}
unordered_map <uint32_t, std::string> *liveIPs;
我从未见过这样的用法(find(...)和end()的用法)。有人可以帮我了解它返回的内容吗?(顺便说一下,这是c++代码)
您使用此技术来检查容器是否包含该值。
find()
返回与该值对应的迭代器,end()
返回容器末尾的迭代器 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() 作为成员函数)。