Initial commit
This commit is contained in:
100
libs/multi_index/example/sequenced.cpp
Normal file
100
libs/multi_index/example/sequenced.cpp
Normal file
@@ -0,0 +1,100 @@
|
||||
/* 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;
|
||||
}
|
||||
Reference in New Issue
Block a user