summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/bimap/example/repetitions_counter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/bimap/example/repetitions_counter.cpp')
-rw-r--r--src/boost/libs/bimap/example/repetitions_counter.cpp91
1 files changed, 91 insertions, 0 deletions
diff --git a/src/boost/libs/bimap/example/repetitions_counter.cpp b/src/boost/libs/bimap/example/repetitions_counter.cpp
new file mode 100644
index 000000000..d16570983
--- /dev/null
+++ b/src/boost/libs/bimap/example/repetitions_counter.cpp
@@ -0,0 +1,91 @@
+// Boost.Bimap
+//
+// Copyright (c) 2006-2007 Matias Capeletto
+//
+// 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)
+
+// VC++ 8.0 warns on usage of certain Standard Library and API functions that
+// can be cause buffer overruns or other possible security issues if misused.
+// See https://web.archive.org/web/20071014014301/http://msdn.microsoft.com/msdnmag/issues/05/05/SafeCandC/default.aspx
+// But the wording of the warning is misleading and unsettling, there are no
+// portable alternative functions, and VC++ 8.0's own libraries use the
+// functions in question. So turn off the warnings.
+#define _CRT_SECURE_NO_DEPRECATE
+#define _SCL_SECURE_NO_DEPRECATE
+
+// Boost.Bimap Example
+//-----------------------------------------------------------------------------
+
+#include <boost/config.hpp>
+
+#include <iostream>
+#include <boost/tokenizer.hpp>
+
+#include <boost/bimap/bimap.hpp>
+#include <boost/bimap/unordered_set_of.hpp>
+#include <boost/bimap/list_of.hpp>
+
+using namespace boost::bimaps;
+
+struct counter {
+ counter() : c(0) {}
+ counter& operator++() { ++c; return *this; }
+ unsigned int operator++(int) { return c++; }
+ operator const unsigned int() const { return c; }
+ private:
+ unsigned int c;
+};
+
+int main()
+{
+ //[ code_repetitions_counter
+
+ typedef bimap
+ <
+ unordered_set_of< std::string >,
+ list_of< counter > /*< `counter` is an integer that is initialized
+ in zero in the constructor >*/
+
+ > word_counter;
+
+ typedef boost::tokenizer<boost::char_separator<char> > text_tokenizer;
+
+ std::string text=
+ "Relations between data in the STL are represented with maps."
+ "A map is a directed relation, by using it you are representing "
+ "a mapping. In this directed relation, the first type is related to "
+ "the second type but it is not true that the inverse relationship "
+ "holds. This is useful in a lot of situations, but there are some "
+ "relationships that are bidirectional by nature.";
+
+ // feed the text into the container
+ word_counter wc;
+ text_tokenizer tok(text,boost::char_separator<char>(" \t\n.,;:!?'\"-"));
+
+ for( text_tokenizer::const_iterator it = tok.begin(), it_end = tok.end();
+ it != it_end ; ++it )
+ {
+ /*<< Because the right collection type is `list_of`, the right data
+ is not used a key and can be modified in the same way as with
+ standard maps. >>*/
+ ++ wc.left[*it];
+ }
+
+ // list words with counters by order of appearance
+ /*<< When we insert the elements using the left map view, the element
+ is inserted at the end of the list. >>*/
+ for( word_counter::right_const_iterator
+ wit = wc.right.begin(), wit_end = wc.right.end();
+
+ wit != wit_end; ++wit )
+ {
+ std::cout << wit->second << ": " << wit->first;
+ }
+ //]
+
+ return 0;
+}
+
+