什么是将地图的键集转换为键向量的有效方法

时间:2013-05-28 07:24:56

标签: c++ std stdvector stdmap

将地图的键集转换为键向量的有效方法是什么? 目前我正在迭代我的地图并将iter.first添加到vector中,这是否类似于Java的KeySet api?

2 个答案:

答案 0 :(得分:5)

这样做的一种方法是:

std::vector<KeyType> v;
std::map<KeyType, ValueType> m;

v.reserve(m.size());
std::transform(m.begin(), m.end(), std::back_inserter(v), [](const std::pair<KeyType, ValueType>& p) { return p.first; });

答案 1 :(得分:3)

如果你已经在使用boost,那么Range库附带了一个方便的map_keys函数,它不需要临时vector

更通用的方法是将某种transform_iterator放在map迭代器之上(这实质上就是Boost.Range所做的那样)。

否则,您可以根据std::transform调用重写复制到矢量的方法。可能先于vector::reserve减少分配。

如果你还没有变换迭代器,你可能想要使用最后一个解决方案,因为前两个很难做到,这取决于你想要的旧标准的兼容性。