2

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

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

4

2 回答 2

6

std::set有一个operator<在相同类型的两个集合之间执行字典顺序比较. 所以是的, anstd::set<T>可以是地图的有效键。

Anstd::pair<T1,T2>也有一个operator<实现字典比较的方法,所以两者都std::map<std::pair<T1, T2>, T3>有效并且有一个小于比较实现严格的弱排序时也是有效的。所以要求更严格。两者和都需要比较作为映射的键,但它们不需要它来形成有效的对。因此,有效的对不一定构成映射的有效密钥。另一方面,您可以使用自己的比较标准来实例化地图。T1T2operator<T1T2

std::map<std::pair<T1, T2>, T3, Comp> m; 
于 2013-03-04T13:49:41.287 回答
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;

于 2013-03-04T13:54:04.490 回答