Я хочу реализовать функцию ifexists(), которая проверяет наличие ключа на карте или нет.
Если это std :: map <>, я могу использовать функцию find() в шаблоне и, следовательно, может реализовать мою функцию ifexists(). (ниже)
Но я использую Boost :: associative_property_map, который ссылается на мою std :: map. Я могу использовать функции get и put на этом ассоциативном отображении свойств.
std::map< int, int > mymap;
boost::associative_property_map< std::map< int, int > > asso_map ( mymap );
//asso_map stores reference to mymap. and i can use get and put functions on this associative map.
Теперь, если я передам этот asso_map в мою функцию шаблона "ifexists (asso_map, key)", он выдает мне следующую ошибку:
error: âclass boost::associative_property_map<std::map<int, int > >â has no member named âendâ
error: âclass boost::associative_property_map<std::map<int, int > >â has no member named âfindâ
Вот мой код функции шаблона:
template <typename map_t, typename key_t>
bool exists_in(map_t map, key_t key)
{
return map.find(key) != map.end();
}
//function call:--> v is int.
if( exists_in ( asso_map, v) ) ... Error (above)
if( exists_in ( mymap, v) ) ... Correct
Ошибка, заключающаяся в том, что она не является функцией-членом как "найти", является правильной и после просмотра документации здесь ясно, что она не имеет такой функции-члена, как find().
Однако, если я передаю фактическую карту (т.е. mymap) в функцию шаблона, она работает. Но я не хочу этого делать, потому что тогда нет смысла использовать ассоциативную карту свойств boost.
Я хотел найти способ, которым я мог бы использовать find() для моего asso_map associative_property_map. Я знаю, что я мог бы перебирать assoc_map и найти выход. но интересно, могу ли я как-то использовать find()
Надеюсь, это станет более ясным. Извините за двусмысленность.
К сожалению, boost::associative_property_map
не дает доступа к ассоциативному контейнеру, который он использует. Вы не можете получить доступ к функции find()
на std::map
или перебрать ее содержимое. У вас есть только доступ к API- карте свойств Lvalue.