Checking value exist in a std::map - C++

Navaneeth K N picture Navaneeth K N · Feb 11, 2009 · Viewed 71.4k times · Source

I know find method finds the supplied key in std::map and return an iterator to the element. Is there anyway to find the value and get an iterator to the element? What I need to do is to check specified value exist in std::map. I have done this by looping all items in the map and comparing. But I wanted to know is there any better approach for this.

Here is what I have wrote

bool ContainsValue(Type_ value)
{
    bool found = false;
    Map_::iterator it = internalMap.begin(); // internalMap is std::map
    while(it != internalMap.end())
    {
        found = (it->second == value);
        if(found)
            break;
        ++it;
    }
    return found;
}

Edit

How about using another map internally which stores value,key combination. So I can call find on it? Is find() in std::map doing sequential search?

Thanks

Answer

Mark Ransom picture Mark Ransom · Feb 11, 2009

You can use boost::multi_index to create a bidirectional map - you can use either value of the pair as a key to do a quick lookup.