sequenced.cpp
来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 101 行
CPP
101 行
/* Boost.MultiIndex example of use of sequenced 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/sequenced_index.hpp>#include <boost/tokenizer.hpp>#include <algorithm>#include <iomanip>#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< sequenced<>, ordered_non_unique<identity<std::string> > >> text_container;/* ordered index */typedef nth_index<text_container,1>::type ordered_text;typedef boost::tokenizer<boost::char_separator<char> > text_tokenizer;int main(){ std::string text= "Alice was beginning to get very tired of sitting by her sister on the " "bank, and of having nothing to do: once or twice she had peeped into the " "book her sister was reading, but it had no pictures or conversations in " "it, 'and what is the use of a book,' thought Alice 'without pictures or " "conversation?'"; /* feed the text into the container */ text_container tc; text_tokenizer tok(text,boost::char_separator<char>(" \t\n.,;:!?'\"-")); std::copy(tok.begin(),tok.end(),std::back_inserter(tc)); /* list all words in alphabetical order along with their number * of occurrences */ ordered_text& ot=get<1>(tc); for(ordered_text::iterator it=ot.begin();it!=ot.end();){ std::cout<<std::left<<std::setw(14)<<*it<<":"; /* print the word */ ordered_text::iterator it2=ot.upper_bound(*it); /* jump to next */ std::cout<<std::right<<std::setw(3) /* and compute the distance */ <<std::distance(it,it2)<<" times"<<std::endl; it=it2; } /* reverse the text and print it out */ tc.reverse(); std::cout<<std::endl; std::copy( tc.begin(),tc.end(),std::ostream_iterator<std::string>(std::cout," ")); std::cout<<std::endl; tc.reverse(); /* undo */ /* delete most common English words and print the result */ std::string common_words[]= {"the","of","and","a","to","in","is","you","that","it", "he","for","was","on","are","as","with","his","they","at"}; for(std::size_t n=0;n<sizeof(common_words)/sizeof(common_words[0]);++n){ ot.erase(common_words[n]); } std::cout<<std::endl; std::copy( tc.begin(),tc.end(),std::ostream_iterator<std::string>(std::cout," ")); std::cout<<std::endl; return 0;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?