Boost.MultiIndexの練習
ここでは、ランダムアクセスと、辞書順という2つの
アクセス方法・ソート順を持つコンテナを作成しています。
#include <iostream> #include <boost/multi_index_container.hpp> #include <boost/multi_index/random_access_index.hpp> #include <boost/multi_index/ordered_index.hpp> #include <boost/multi_index/member.hpp> #include <boost/multi_index/identity.hpp> using namespace boost::multi_index; typedef multi_index_container< int, indexed_by< random_access<>, ordered_unique<identity<int> > > > Container; typedef Container::nth_index<0>::type Array; typedef Container::nth_index<1>::type Set; int main() { Container c; Array& ar = c.get<0>(); Set& st = c.get<1>(); st.insert(1); st.insert(3); st.insert(2); st.insert(5); st.insert(4); // c : デフォルトがrandom_accessなのでランダムアクセスできる for (std::size_t i = 0; i < c.size(); ++i) std::cout << c[i] << std::endl; // 1, 3, 2, 5, 4の順に出力される // ar : インデックスがrandom_accessなのでランダムアクセスできる for (std::size_t i = 0; i < ar.size(); ++i) std::cout << ar[i] << std::endl; // 1, 3, 2, 5, 4の順に出力される // st : インデックスがordered_uniqueなので辞書順 for (Set::const_iterator it = st.begin(); it != st.end(); ++it) std::cout << *it << std::endl; // 1, 2, 3, 4, 5の順に出力される // st : ランダムアクセスはできない for (std::size_t i = 0; i < st.size(); ++i) std::cout << st[i] << std::endl; // エラー! }