2014-02-20 9 views
0

Я хочу, чтобы сравнить элемент из Multimap со строкой, как:Сравнить Multimap с Последовательностью

struct value { 
string res; 
time_t t; 
}; 

string result; 

multimap<int, value> values 
value new_value; 

if((values.find(new_value.res)) != result) // code snipped 
{ 
//... do something 
} 

Спасибо!

+0

Что был неправильным с вашим кодом? Вы что-то пробовали? – rockinfresh

ответ

0

Вы можете использовать std::find и лямбда-выражение

auto it=std::find_if(values.begin(), values.end(), [&](const std::pair<int,value> &pair) 
{ 
    return pair.second.res == new_value.res 
}); 

if (it != values.end()) 
{ 
    // Found it 
} 

Если у вас нет доступа к C++ 11, то вы можете цикл над ним:

for(std::map<int,value>::iterator it=values.begin(); it!=values.end(); ++it) 
{ 
    if((*it).second.res == new_value.res) 
    { 
    // Found it, 
    break; 
    } 
} 
+1

Я думаю, вы имеете в виду 'std :: find_if'? Функция 'std :: find' принимает значение * для поиска в качестве третьего аргумента. –

+0

@JoachimPileborg - спасибо – Sean

0

Вы не можете использовать функцию std::multimap::find для этого, так как он ищет только ключи.

Вместо этого вы должны использовать более общую функцию std::find_if с пользовательским предикатом. Что-то вроде

std::find_if(std::begin(values), std::end(values), 
    [&new_value](const std::pair<const int, value> &p) 
    { 
     return p.second == new_value.res; 
    }); 
+0

Я думаю, вы имеете в виду 'const std :: pair Sean

+1

@Sean. Вы правы. Не знаю, как я мог неправильно понять это. :) –

Смежные вопросы