Listing 7
// demonstrate unordered container construction and insertion #include <unordered_map> #include <array> #include <iomanip> #include <iostream> #include <ostream> #include <iterator> #include <string> #include <utility> using std::tr1::unordered_multimap; using std::tr1::array; using std::string; using std::ostream_iterator; using std::pair; using std::make_pair; using std::basic_ostream; using std::cout; using std::setw; typedef unordered_multimap<int, string> table; typedef table::iterator iter; typedef table::value_type elt; array<elt, 5> values = { // initial values for unordered containers elt(1, "first"), elt(2, "second"), elt(3, "third"), elt(4, "fourth"), elt(5, "fifth") }; namespace std { // put inserter in namespace std template <class Elem, class Traits> basic_ostream<Elem, Traits>& operator<<( basic_ostream<Elem, Traits>& os, const elt& val) { // insert elt into stream return os << '[' << val.first << ',' << val.second << ']'; } } void show(const char * title, iter first, iter last) { // show title and contents of range [first, last) cout << title << ":\n "; copy(first, last, ostream_iterator<elt>(cout, " ")); cout << '\n'; } int main() { // demonstrate use of std::tr1::unordered_multimap table t0(values.begin(), values.end()); show("initialized table", t0.begin(), t0.end()); table t1; show("empty table", t1.begin(), t1.end()); t1.insert(values.begin(), values.end()); show("insert range", t1.begin(), t1.end()); t1.insert(make_pair(4, "other fourth")); show("insert element", t1.begin(), t1.end()); t1.erase(3); show("erase element", t1.begin(), t1.end()); pair<iter, iter> res = t1.equal_range(4); show("equal range", res.first, res.second); t1.erase(res.first, res.second); show("erase range", t1.begin(), t1.end()); return 0; }