2011-04-06 82 views
13

将两个值映射到一个键的最佳方式是什么?std ::映射一个键,两个值

即一个值和布尔值的项目。

尝试使用:

std::map<std::string, std::pair<std::string, bool> > myMap2 

但是这似乎并不像正确的解决方案。有没有更优雅的方式来做到这一点?

+7

'std :: pair <>'就好了。你关心什么? – Keith 2011-04-06 01:37:59

回答

7

这确实是正确的解决方案。更一般地说,考虑使用std::tuple而不是std::pair作为统一接口,而不管值的数量多少(因为std::pair明显限制为两个),或者如果编译器太老以至于不能实现std::std::tr1::实现,则使用boost::tuple

+0

元组是...感谢 – JonnyCplusplus 2011-04-06 01:55:37

+2

或者一个结构体,当你的元组开始失控时... – 2011-04-06 08:23:43

+1

@Steve:...当元组包含两个以上的项目时。 :)严重的是,当元组的内容不是以同样的方式打印或者以某种明显的方式构造时,元组会促进不可读的代码。代码说'iter-> second.get <6>()'是讨厌的。 – 2011-04-06 12:30:47

6

按照您的操作使用std::pair<>,或者创建一个包含要存储的值的自定义结构。我会在大多数情况下做后者,因为这些值的名称比firstsecond更具描述性。

1

通常,我创建一个简单的mapValue结构体/类。

相关问题