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 + -
显示快捷键?