我在這裏嘗試向後迭代multimap鍵,使用硬編碼類型的函數工作。如何在模板化函數中使用typedefs?
#include <map>
#include <string>
#include <iostream>
using namespace std;
multimap<int, string> mm = { {1, "a"}, {1, "lemon"}, {2, "peacock"}, {3, "angel"} };
void printKeysBackwards(multimap<int, string> mm) {
typedef multimap<int, string> multimap_type;
typedef std::reverse_iterator<multimap_type::iterator> reverse_iterator;
for (auto it = mm.rbegin(), end = mm.rend(); it != end;
it = reverse_iterator(mm.lower_bound(it->first))) {
cout << (*it).first << endl;
}
}
int main() {
printKeysBackwards(mm);
return 0;
}
但是,當我試圖模板功能:
template <class Key, class Val>
void printKeysBackwards(multimap<Key, Val> mm) {
typedef multimap<Key, Val> multimap_type;
typedef std::reverse_iterator<multimap_type::iterator> reverse_iterator;
for (auto it = mm.rbegin(), end = mm.rend(); it != end;
it = reverse_iterator(mm.lower_bound(it->first))) {
cout << (*it).first << endl;
}
}
的typedef告訴我,它不喜歡被模板:從您的使用
error: type/value mismatch at argument 1 in template parameter list for
'template<class _Iterator> class std::reverse_iterator'