在C++std::map中使用模板迭代器
Using template iterator in C++ std::map
目标是使用模板打印地图中的每个k,v对
template<typename K, typename V>
typedef std::map<K,V>::const_iterator MapIterator;
template<typename K, typename V>
void PrintMap(const std::map<K,V>& m) {
for (MapIterator iter = m.begin(); iter != m.end(); iter++) {
std::cout << "Key: " << iter->first << " "
<< "Values: " << iter->second << std::endl;
}
}
然而,我的编译器说iter->第一个表达式无法解决,这是什么问题?
编辑:我应该先阅读编译错误,然后通过跟踪错误来解决问题。感谢@Oli Charlesworth,不假思索地寻求帮助不是一个好习惯。
error: template declaration of ‘typedef’
error: need ‘typename’ before ‘std::map<T1, T2>::const_iterator’ because ‘std::map<T1, T2>’ is a dependent scope
error: ‘MapIterator’ was not declared in this scope
error: expected ‘;’ before ‘iter’
error: ‘iter’ was not declared in this scope
完成:这个问题已经在"我在哪里以及为什么要把";模板";以及";typename";关键词?。根据@RiaD的说法,这个问题有一个微不足道的解决方案作为补充。
template<typename K, typename V>
void PrintMap(const std::map<K,V>& m) {
typedef typename std::map<K,V>::const_iterator MapIterator;
for (MapIterator iter = m.begin(); iter != m.end(); iter++) {
std::cout << "Key: " << iter->first << " "
<< "Values: " << iter->second << std::endl;
}
}
模板typedef
不应编译。在类中使用using
指令或typedef
#include <map>
#include <iostream>
template<typename K, typename V>
using MapIterator = typename std::map<K,V>::const_iterator;
template<typename K, typename V>
void PrintMap(const std::map<K,V>& m) {
for (MapIterator<K, V> iter = m.begin(); iter != m.end(); iter++) {
std::cout << "Key: " << iter->first << " "
<< "Values: " << iter->second << std::endl;
}
}
int main() {
std::map<int, int> x = {{5, 7}, {8, 2}};
PrintMap(x);
return 0;
}
http://ideone.com/xxdKBQ
相关文章:
- 使用std::multimap迭代器创建std::list
- 使用迭代器对 std::list 进行排序
- C :在我们拥有迭代器的std :: unordered_set中替换一个元素
- 用迭代器从std :: string获取子字符串
- 使用带有反向迭代器的std :: find()
- 如何使用自定义迭代器使用std :: lower_bound
- 调用"替换(std::basic_string<char>::迭代器, std::basic_string::<char>迭代器, char, int)"没有匹配函数|
- 如何使用反向迭代器从“std::set”中删除元素
- 如何为自定义模板化迭代器实现 std::d istance()
- 自己的迭代器因 std::sort 而崩溃
- 如何使用迭代器插入std ::列表
- 将自己的迭代器与 std::string 一起使用
- 映射/设置迭代器在 std::map 中不可递增
- std::set::迭代器和std::set::const_iterator之间是否存在操作差异
- 迭代器在std::unordered_map<int,std::vector<Element>>
- 为什么无法使用反向迭代器从 std::map 中删除元素
- 使用过去结束迭代器的 std::iter_swap 不好吗?
- 使用反向迭代器插入std::list会更改原始反向迭代程序的值
- 通过迭代器从std::vector中删除
- MSVC 2015 - 自定义迭代器的 std::for_each 中的编译器错误(仅在调试中时)