在BOOST图中使用boost关联属性映射中的find()时出错

时间:2014-02-03 14:10:01

标签: c++ boost c++11 map boost-graph

我想实现一个 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”是正确的,在看到文档here之后,很明显它没有find()这样的成员函数。

但是,如果我将实际地图(即 mymap )传递给模板功能,它就能正常工作。但我不想这样做因为那时没有使用boost的关联属性映射的意义。

我想找到一种方法,可以将find()用于我的associative_property_map asso_map 。我知道我可以迭代 assoc_map 并找到出路。但想知道我是否能以某种方式使用find()

我希望它更清楚。抱歉模棱两可。

1 个答案:

答案 0 :(得分:0)

不幸的是,boost::associative_property_map无法访问它使用的关联容器。您无法访问find()的{​​{1}}功能,也无法对其内容进行迭代。您只能访问Lvalue Property Map的API。