我有一个模板类,如下所示(using namespace std
为简洁起见,假设为 a):
template <typename Type, typename Compare = less<Type>>
struct weighted_base
{
typedef typename set<pair<Type, double>, set_compare<Type, Compare>> mapped_type;
map<Type, mapped_type, Compare> backing_map;
...
};
其中set_compare
定义为:
template <typename Type, typename Compare>
struct set_compare
{
bool operator()(const pair<Type, double>& a,
const pair<Type, double>& b)
{
return Compare(a.first, b.first);
}
};
也就是说,映射将类型的键作为Type
值std::set<std::pair<Type, double>>
。当我使用以下方法时,这会出现一些问题:
void insert(const Type& from, const Type& to, double weight)
{
//...
mapped_type& adj_nodes = backing_map[from];
adj_nodes.insert(make_pair(to, weight));
}
问题在于set
,当它调用时set_compare
,它有一个类型const Type&
,不是Type
。因此,假设它是std::less
,在这种情况下,它将尝试调用less<int>::less(const int& a, const int& b)
which 失败。
是否有某种方法可以修复它,以便两个包含都可以在这里(有效地)使用相同的比较功能?