random_access.cpp
来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 103 行
CPP
103 行
/* Boost.MultiIndex example of use of random access indices. * * Copyright 2003-2008 Joaquin M Lopez Munoz. * Distributed under the Boost Software License, Version 1.0. * (See accompanying file LICENSE_1_0.txt or copy at * http://www.boost.org/LICENSE_1_0.txt) * * See http://www.boost.org/libs/multi_index for library home page. */#if !defined(NDEBUG)#define BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING#define BOOST_MULTI_INDEX_ENABLE_SAFE_MODE#endif#include <boost/multi_index_container.hpp>#include <boost/multi_index/identity.hpp>#include <boost/multi_index/ordered_index.hpp>#include <boost/multi_index/random_access_index.hpp>#include <boost/tokenizer.hpp>#include <algorithm>#include <iostream>#include <iterator>#include <string>using boost::multi_index_container;using namespace boost::multi_index;/* text_container holds words as inserted and also keep them indexed * by dictionary order. */typedef multi_index_container< std::string, indexed_by< random_access<>, ordered_non_unique<identity<std::string> > >> text_container;/* ordered index */typedef nth_index<text_container,1>::type ordered_text;/* Helper function for obtaining the position of an element in the * container. */template<typename IndexIterator>text_container::size_type text_position( const text_container& tc,IndexIterator it){ /* project to the base index and calculate offset from begin() */ return project<0>(tc,it)-tc.begin();}typedef boost::tokenizer<boost::char_separator<char> > text_tokenizer;int main(){ std::string text= "'Oh, you wicked little thing!' cried Alice, catching up the kitten, " "and giving it a little kiss to make it understand that it was in " "disgrace. 'Really, Dinah ought to have taught you better manners! You " "ought, Dinah, you know you ought!' she added, looking reproachfully at " "the old cat, and speaking in as cross a voice as she could manage " "-- and then she scrambled back into the armchair, taking the kitten and " "the worsted with her, and began winding up the ball again. But she " "didn't get on very fast, as she was talking all the time, sometimes to " "the kitten, and sometimes to herself. Kitty sat very demurely on her " "knee, pretending to watch the progress of the winding, and now and then " "putting out one paw and gently touching the ball, as if it would be glad " "to help, if it might."; /* feed the text into the container */ text_container tc; tc.reserve(text.size()); /* makes insertion faster */ text_tokenizer tok(text,boost::char_separator<char>(" \t\n.,;:!?'\"-")); std::copy(tok.begin(),tok.end(),std::back_inserter(tc)); std::cout<<"enter a position (0-"<<tc.size()-1<<"):"; text_container::size_type pos=tc.size(); std::cin>>pos; if(pos>=tc.size()){ std::cout<<"out of bounds"<<std::endl; } else{ std::cout<<"the word \""<<tc[pos]<<"\" appears at position(s): "; std::pair<ordered_text::iterator,ordered_text::iterator> p= get<1>(tc).equal_range(tc[pos]); while(p.first!=p.second){ std::cout<<text_position(tc,p.first++)<<" "; } std::cout<<std::endl; } return 0;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?