【发布时间】:2013-05-23 01:48:27
【问题描述】:
将地图的键集转换为键向量的有效方法是什么 目前我正在遍历我的地图并将 iter.first 添加到向量中,这是否类似于 Java 的 KeySet api?
【问题讨论】:
将地图的键集转换为键向量的有效方法是什么 目前我正在遍历我的地图并将 iter.first 添加到向量中,这是否类似于 Java 的 KeySet api?
【问题讨论】:
一种方法是这样的:
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; });
【讨论】:
如果您已经在使用 boost,Range 库带有一个方便的 map_keys 函数,它不需要临时的 vector。
一种更通用的方法是在 map 迭代器之上放置某种 transform_iterator(本质上就是 Boost.Range 所做的)。
否则,您复制到向量的方法可以用std::transform 调用来重写。可能在 vector::reserve 之前以减少分配。
如果您还没有转换迭代器,您可能希望使用最后一个解决方案,因为前两个解决方案很难正确使用,具体取决于您希望与旧标准的兼容性。
【讨论】: