将地图的键集转换为键向量的有效方法是什么? 目前我正在迭代我的地图并将iter.first添加到vector中,这是否类似于Java的KeySet api?
答案 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
减少分配。
如果你还没有变换迭代器,你可能想要使用最后一个解决方案,因为前两个很难做到,这取决于你想要的旧标准的兼容性。