目前我正在迭代我的地图并将 iter.first 添加到向量中,将地图的键集转换为键向量的有效方法是什么,这类似于 Java 的 KeySet api吗?
问问题
119 次
2 回答
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; });
于 2013-05-28T07:32:54.383 回答
3
如果您已经在使用 boost,Range 库带有一个方便的map_keys函数,它消除了对临时vector
.
一种更通用的方法是将某种 transform_iterator 放在map
迭代器之上(本质上是 Boost.Range 所做的)。
否则,可以根据std::transform
调用重写您复制到向量的方法。之前可能vector::reserve
会减少分配。
如果您还没有转换迭代器,您可能希望使用最后一个解决方案,因为前两个解决方案很难正确,具体取决于您希望与旧标准的兼容性。
于 2013-05-28T07:33:15.603 回答