【发布时间】:2012-03-12 14:43:44
【问题描述】:
从 std::map 的最后 n 个元素创建 std::vector 的 C++ 惯用方式是什么?
我对保留向量中的顺序不感兴趣。
我可以复制元素,像这样:
std::map< double, MyType > m;
size_t n = 3;
std::vector< MyType > v;
std::map< double, MyType >::iterator it = m.end();
while ( n-- ) { // assuming m.size() >= n
it--;
v.push_back(it->second);
}
但是,还有其他更习惯的方法吗?
【问题讨论】:
-
double是地图的 非常 错误键类型。浮点值的精度使其通常无法使用。 -
@Xeo 感谢您的评论。 “无法使用”是什么意思?
-
好吧,假设你是
map[13.37] = blargh;。例如,不能保证使用map[13.07 + 0.3]或double d = 13.37; map[d] ...得到相同的结果,因为并非每个数字都可以精确地表示为浮点值。谷歌应该提供更多信息,“浮点数不准确”。 -
@Xeo 好的,没关系。幸运的是,我没有想到以您显示的有问题的方式使用该地图:-)