1

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

4

2 回答 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 回答