2013-03-04 77 views
2

我知道在std::map我们有一个关键字和一个相应的映射值。是std :: map <std :: set <long>,double> AND std:map <std :: pair <long, long>,double> C++中的有效数据类型?

现在在我提到的数据类型中,键将是std::set<long>std::pair<long, long>类型。那么,是否有效地记住,在映射值中存储的是按键的排序值。那么,std::map<std::set<long>, double>std:map< std::pair<long, long>, double>有效吗?

+3

也许我错过了我的咖啡因剂量,我的大脑坏了,但在你的声明'std :: map ',std :: set是模板,而不是一种。你将不得不写'std :: map ,double>'来创建一个类型。 – paercebal 2013-03-04 13:55:39

+0

是的,我只是说。但我的懒惰认为这部分是自我暗示! – user1599964 2013-03-04 13:57:09

+1

显然,安德烈同意我的观点,我怀疑你的编译器也会......懒惰是一种美德,但不要滥用它...... ;-) – paercebal 2013-03-04 13:58:27

回答

6

std::set有一个operator<它执行两组相同类型之间的词典比较。所以是的,std::set<T>可以成为地图的有效密钥。

一个std::pair<T1,T2>也有operator<实施的逐一比较,所以std::map<std::pair<T1, T2>, T3>也将是有效的当且仅当T1T2有一个小于比较operator<实施严格的弱序。所以要求更严格。 T1T2需要比较作为地图的关键字,但他们不需要它来形成有效的对。所以一个有效的对不一定会为地图形成一个有效的密钥。另一方面,你可以用你自己的比较标准来实例化地图。

std::map<std::pair<T1, T2>, T3, Comp> m; 
4

不,语法错误。你想要的是std::map<std::set<a_type_here>, double>,所以添加模板参数设置。

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;

+0

如果该类型没有'operator <',那么'set '甚至不会编译,所以这个问题是没有意义的。 – juanchopanza 2013-03-04 14:02:00

相关问题