是std :: map <std :: set <long>,double&gt; AND std:map&lt; std :: pair <long,long =“”>,double&gt; C ++中的有效数据类型?</long,> </std :: set <long>

时间:2013-03-04 13:47:46

标签: c++ map

我知道在std::map中我们有一个键和一个相应的映射值。

现在,在我提到的数据类型中,密钥的类型为std::set<long>std::pair<long, long>。因此,这是有效的,请记住,地图值存储在键的排序值的基础上。那么,std::map<std::set<long>, double>std:map< std::pair<long, long>, double>是否有效?

2 个答案:

答案 0 :(得分:6)

std::setoperator<,它在两组相同类型之间执行字典比较。所以是的,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;