gpt4 book ai didi

c++ - 未知大小/参数类型的元组

转载 作者:太空狗 更新时间:2023-10-29 20:32:09 27 4
gpt4 key购买 nike

我需要创建一个映射,从整数到元组集,单个集合中的元组具有相同的大小。问题在于元组的大小及其参数类型可以在运行时而不是编译时确定。我在想象这样的事情:

std::map<int, std::set<boost::tuple> >

但不太确定如何准确地做到这一点,霸道地使用指针。

这样做的目的是创建临时关系(表),每个关系都有一个唯一的标识符(键),也许你有另一种方法。

最佳答案

boost::tuple的目的|是混合任意类型。如果,如你所说,

I am only inserting integers

那么你应该使用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;

关于c++ - 未知大小/参数类型的元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2416653/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com