Я хочу реализовать шаблонную функцию 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) в функцию шаблона, она сработает. Но я не хочу этого делать, потому что тогда нет смысла использовать ассоциативную карту свойств повышения.
Я хотел найти способ, где я мог бы использовать find() для моей associative_property_map asso_map. Я знаю, что могу перебрать assoc_map и найти выход. но интересно, могу ли я как-то использовать find()
Я надеюсь, что это более ясно. Извините за двусмысленность.