if (mySharedState -> liveIPs -> find(flowStats -> destinationIP) != mySharedState -> liveIPs -> end() ){
//do something
}
unordered_map <uint32_t, std::string> *liveIPs;
我从未见过这样的用法(使用查找(...)和结束())。有人可以帮我回复一下吗? (顺便说一句,这是c ++代码)
答案 0 :(得分:4)
您可以使用此技术检查容器是否包含该值。
find()
返回与该值对应的迭代器,end()
返回容器末尾的迭代器1,用于表示“未找到值”。
答案 1 :(得分:1)
函数find(value)和end()是名为“containers”的类的成员函数,用于存储各种类型的元素(list,set,vector,map ...)。有关容器here的更多信息。
两个成员函数都返回一个迭代器(一种指针)到容器元素。您可以阅读有关迭代器here的信息。
抽象地说,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()作为成员函数)。