我想使用算法std::include
来处理异构 STL 集合。在我的示例中,我想检查 a std::vector
of integer 是否包含在 a 中std::map
。
我想通过使用一个简单的模板函数来解决这个问题;这样做的原因是因为我想使用 C++ 模板参数推导来让比较器函数的第一个参数是 std::pair vs int 时进行推导,反之亦然(std::include
幕后调用 Comp(a,b ) 和 Comp(b,a) )。
在我的代码下面我想运行
typedef std::map<int,std::string> dict;
typedef std::vector<int> vect;
int data[]={1,2,3,4};
vect l(data,data+4);
dict h;
h.insert(dict::value_type(0,"ciccio"));
h.insert(dict::value_type(1,"ciccio"));
std::includes( h.begin(),h.end()
, l.begin(), l.end(), is_my_less );
我在下面尝试了以下操作,但它没有编译和说partial specialization is not allowed
,但这也unresolved overloaded function type
让我认为我的函数做错了。你知道这可以通过严格使用模板函数来实现吗?
template<class T1,class T2,class T3>
bool is_less_than_pair( const T1&a ,const T2& b ){
return false;
};
template<class T1,class T>
bool is_less_than_pair<
T1
, std::pair<T1,T>
, T >( const T1&a, const std::pair<T1,T>& b ){
return a<b.first;
}
template<class T1, class T>
bool is_less_than_pair<
std::pair<T1,T>
,T1
, T >( const std::pair<T1,T>& a, const T1& b ){
return a.first<b;
}
现在基于函数模板不能部分专门化的事实,我尝试了如下所示的函数重载,但没有成功,gccunresolved overloaded function type
再次告诉我。我能做的最好的事情是什么?
template<class T1,class T2>
bool is_less_than_pair( const std::pair<T1,T2>& a ,const T1& b ){
return a.first<b;
};
template<class T1,class T2>
bool is_less_than_pair( const T1& a ,const std::pair<T1,T2>& b ){
return b.first<a;
};