Search code examples
c++vectoriteratorsubstringmultimap

Find a substring from a vector using iterators


I am trying to make a search function in my application. If the user inputs a substring (or the complete string) I want to know if that substring matches any of the strings or part of the strings stored in my vector.

The following code is written so far:

cout << "Input word to search for: ";
cin >> searchString;


for (multimap <string, vector<string> >::const_iterator it = contactInformationMultimap.cbegin();       it != contactInformationMultimap.cend(); ++it)
{
    for (vector<string>::const_iterator iter = it->second.cbegin(); iter != it->second.cend(); ++iter)
    {
        if (*iter.find(searchString))
            ^^^^^^^^^^^^^^^^^^^^^^^   this does not work, if i cout *iter it is the correct word                     stored in the vector. The problem is that i can not use the find function.
    }                                 
}

Anyone having any suggestions?


Solution

  • Unary operators have less priority than postfix operators. In your if statement you need that the unary operator * would be evaluated before member access operator. So you have to write

    if ( ( *iter ).find(searchString) != std::string::npos )
    

    Or you could write

    if ( iter->find(searchString) != std::string::npos )
    

    Take into account that this record

    if ( ( *iter ).find(searchString) )
    

    makes no sense.

    Also you could write

    for (multimap <string, vector<string> >::const_iterator it = contactInformationMultimap.cbegin();       it != contactInformationMultimap.cend(); ++it)
    {
        for ( const std::string &s : it->second )
        {
            if ( s.find(searchString ) != std::string::npos ) /*...*/;
        }                                 
    }