我知道在std::map
中我们有一个键和一个相应的映射值。
现在,在我提到的数据类型中,密钥的类型为std::set<long>
或std::pair<long, long>
。因此,这是有效的,请记住,地图值存储在键的排序值的基础上。那么,std::map<std::set<long>, double>
和std:map< std::pair<long, long>, double>
是否有效?
答案 0 :(得分:6)
std::set
有operator<
,它在两组相同类型之间执行字典比较。所以是的,std::set<T>
可以是地图的有效密钥。
std::pair<T1,T2>
还有operator<
实施词典比较,因此std::map<std::pair<T1, T2>, T3>
也有效 iff T1
和{{1}有一个小于比较T2
实现严格的弱排序。所以要求更严格。 operator<
和T1
都需要将比较作为地图的关键字,但它们不需要它来形成有效的对。因此,有效对不一定形成地图的有效密钥。另一方面,您可以使用自己的比较标准来实例化地图。
T2
答案 1 :(得分:4)
不,语法错了。你想要的是std::map<std::set<a_type_here>, double>
,所以添加set的模板参数。
注意a_type_here
应该有operator<
,或者您需要使用std::set<a_type_here, compare_function>
您似乎想要的是: std::map<std::pair<long, long>, double> mapping
如何使用的示例; mapping[std::make_pair(1,2)] = 0.1;