BOOST_REVERSE_FOREACH は BOOST_FOREACH と同じようには機能しないことがわかりました。
私のコード:
#include <boost\unordered_map.hpp>
#include <boost\foreach.hpp>
#include <iostream>
#include <string>
typedef boost::unordered_map<std::string, int> map;
int main()
{
map MyMap;
MyMap["two"] = 2;
MyMap["three"] = 3;
MyMap["one"] = 1;
std::cout << MyMap["one"] << MyMap["two"] << MyMap["three"] << std::endl;
BOOST_FOREACH (map::value_type value, MyMap)
{
std::cout << value.second;
}
std::cout << std::endl;
system("pause");
return 0;
}
これはうまくいきますが、逆の繰り返しも使いたいです。だから私は追加します:
BOOST_REVERSE_FOREACH (map::value_type value, MyMap)
{
std::cout << value.second;
}
std::cout << std::endl;
この後、コンパイルされません。順序付けられていないマップで逆 foreach を使用する方法を誰かが教えてくれますか。
コンパイラーは次を提供します:
1>c:\boost_1_52_0\boost\iterator\reverse_iterator.hpp(45): error C2675: unary '--' : 'boost::unordered::iterator_detail::iterator<NodePointer,Value>' does not define this operator or a conversion to a type acceptable to the predefined operator
1> with
1> [
1> NodePointer=boost::unordered::detail::ptr_node<std::pair<const std::string,int>> *,
1> Value=std::pair<const std::string,int>
1> ]
1> c:\boost_1_52_0\boost\iterator\reverse_iterator.hpp(45) : while compiling class template member function 'void boost::reverse_iterator<Iterator>::increment(void)'
1> with
1> [
1> Iterator=boost::unordered::iterator_detail::iterator<boost::unordered::detail::ptr_node<std::pair<const std::string,int>> *,std::pair<const std::string,int>>
1> ]
1> c:\boost_1_52_0\boost\iterator\iterator_facade.hpp(520) : see reference to function template instantiation 'void boost::reverse_iterator<Iterator>::increment(void)' being compiled
1> with
1> [
1> Iterator=boost::unordered::iterator_detail::iterator<boost::unordered::detail::ptr_node<std::pair<const std::string,int>> *,std::pair<const std::string,int>>
1> ]
1> c:\boost_1_52_0\boost\foreach.hpp(266) : see reference to class template instantiation 'boost::reverse_iterator<Iterator>' being compiled
1> with
1> [
1> Iterator=boost::unordered::iterator_detail::iterator<boost::unordered::detail::ptr_node<std::pair<const std::string,int>> *,std::pair<const std::string,int>>
1> ]
1> c:\users\t3\documents\projects\boost unorderedmap test\boost unorderedmap test\main.cpp(25) : see reference to class template instantiation 'boost::foreach_detail_::auto_any<T>' being compiled
1> with
1> [
1> T=boost::reverse_iterator<boost::unordered::iterator_detail::iterator<boost::unordered::detail::ptr_node<std::pair<const std::string,int>> *,std::pair<const std::string,int>>>
1> ]
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========