Dan*_*Dan 7 c++ iterator stl map
我知道这些问题之前有各种各样的问题,但这有点不同.
我有一个包含std :: map的类.虽然我希望在类中使用映射用于其他目的,但在外部我想要将迭代器适配器暴露给映射内的值(即std :: pair中的第二项).
例如在python中我可能会这样做:
def __iter__(self):
return self._dict.itervalues()
Run Code Online (Sandbox Code Playgroud)
我如何在c ++中执行此操作,将实现隐藏在类中?
谢谢,
担
Kon*_*lph 16
看看Boost's transform_iterator,它提供了这种功能:
template <typename K, typename V>
struct get_value {
const V& operator ()(std::pair<K, V> const& p) { return p.second; }
};
class your_class {
typedef map<int, float> TMap;
TMap mymap;
public:
typedef get_value<TMap::key_type, TMap::data_type> F;
typedef
boost::transform_iterator<F, TMap::iterator>
value_iterator;
value_iterator begin() { return make_transform_iterator(mymap.begin(), F()); }
value_iterator end() { return make_transform_iterator(mymap.end(), F()); }
// TODO Same for const versions.
// Rest of the interface …
};
Run Code Online (Sandbox Code Playgroud)
现在你可以迭代这些值,例如:
your_class c;
// Fill c with some values …
copy(c.begin(), c.end(), ostream_iterator<float>(cout, " "));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
856 次 |
| 最近记录: |