の目的boost::tuple
は、任意の型を混在させることです。もし、おっしゃる通り、
整数のみを挿入しています
を使用する必要がありますmap< int, set< vector< int > > >
。(私があなただったら、それにいくつかtypedef
の s を投げます。)
ただし、元の質問に答えるには、boost::tuple
実行時に任意の型を許可しません。boost::any
します。ただし、any
比較はサポートしていないため、set
.
typedef vector< boost::any > tuple;
struct compare_tuple { bool operator()( tuple const &l, tuple const &r ) const {
assert ( l.size() == r.size() );
for ( tuple::iterator lit = l.begin(), rit = r.begin();
lit != l.end(); ++ lit, ++ rit ) {
assert ( lit->type() == rit->type() );
if ( lit->type() == typeid( foo ) ) { // find the type and perform "<"
return boost::any_cast<foo>(*lit) < boost::any_cast<foo>(*rit);
} else if ( lit->type() == typeid( bar ) ) {
return boost::any_cast<bar>(*lit) < boost::any_cast<bar>(*rit);
} /* etc; you will need to enumerate all the types you can insert */
}
} };
typedef std::map< int, std::set< tuple, compare_tuple > > main_map;