ошибка при использовании find () в карте ассоциативных свойств boost в графе BOOST

0

Я хочу реализовать функцию 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()

Надеюсь, это станет более ясным. Извините за двусмысленность.

  • 0
    В чем вопрос? Из твоего сообщения не понятно. Более того, ваш код смешивает код C ++ и комментарии, которые на самом деле не отформатированы как комментарии C ++. Можете ли вы отредактировать свой вопрос для решения этих двух вопросов?
  • 0
    Привет, я обновил вопрос. Надеюсь, теперь все понятно.
Теги:
c++11
boost
boost-graph
map

1 ответ

0
Лучший ответ

К сожалению, boost::associative_property_map не дает доступа к ассоциативному контейнеру, который он использует. Вы не можете получить доступ к функции find() на std::map или перебрать ее содержимое. У вас есть только доступ к API- карте свойств Lvalue.

  • 0
    Я знаю, что это препятствует дополнительной функциональности. Я задал тот же вопрос в списке буст-пользователей и в ожидании их ответа. Если бы они могли добавить этот интерфейс, это было бы очень полезно. Должна быть какая-то причина, почему они не предоставили такой интерфейс. Get, Put и Find очень важны для использования карт недвижимости.
  • 0
    @ user2404319 Если рассылка Boost дает вам более полезный ответ, пожалуйста, оставьте здесь другой ответ или измените мой ответ.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню