ブースト グラフで、整数または文字の頂点を持つグラフを作成する方法を知っています (以下のコメント付きのコードを参照)。問題は、このコードを文字列の頂点で動作するように書き直す方法です。
#include <string>
#include <boost/graph/adjacency_list.hpp>
using namespace boost;
int main (int argc, char **argv)
{
typedef adjacency_list <vecS, vecS, undirectedS> vector_graph_t;
//works
//typedef std::pair <int, int> E;
//E edges[] = { E (2, 5), E (5, 3), E (3, 1), E (5, 1)};
//vector_graph_t g (&edges[0],&edges[0] + sizeof(edges) / sizeof(E), 4);
//works
//typedef std::pair <char, char> E;
//E edges[] = { E ('a', 'b'), E ('a', 'c'), E ('x', 'a'), E ('b', 'x')};
//vector_graph_t g (&edges[0],&edges[0] + sizeof(edges) / sizeof(E), 4);
//does not work
typedef std::pair <std::string, std::string> E;
E edges[] = { E ("aaa", "bbb"), E ("bbb", "ccc"), E ("aaa", "xxx"), E ("bbb", "ccc")};
vector_graph_t g (&edges[0],&edges[0] + sizeof(edges) / sizeof(E), 4);
return 0;
}
上記のプログラムをコンパイルすると、次のエラーが発生します。
/usr/local/include/boost/graph/detail/adjacency_list.hpp:2076: error: no matching function for call to ‘add_edge(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, boost::no_property, boost::no_property, boost::no_property, boost::listS>&)’
/usr/local/include/boost/graph/detail/adjacency_list.hpp:1030: note: candidates are: std::pair<typename Config::edge_descriptor, bool> boost::add_edge(typename Config::vertex_descriptor, typename Config::vertex_descriptor, boost::undirected_graph_helper<C>&) [with Config = boost::detail::adj_list_gen<boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, boost::no_property, boost::no_property, boost::no_property, boost::listS>, boost::vecS, boost::vecS, boost::undirectedS, boost::no_property, boost::no_property, boost::no_property, boost::listS>::config]