1b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//===----------------------------------------------------------------------===//
2b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//
3b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//                     The LLVM Compiler Infrastructure
4b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//
5b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// This file is dual licensed under the MIT and the University of Illinois Open
6b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// Source Licenses. See LICENSE.TXT for details.
7b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//
8b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//===----------------------------------------------------------------------===//
9b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
10b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// <unordered_map>
11b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
12b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// template <class Key, class T, class Hash = hash<Key>, class Pred = equal_to<Key>,
13b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//           class Alloc = allocator<pair<const Key, T>>>
14b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// class unordered_multimap
15b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
16b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// iterator erase(const_iterator p)
17b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
18b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <unordered_map>
19b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <string>
20b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <cassert>
21b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
22ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner#include "../../../min_allocator.h"
23ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner
24b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerint main()
25b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner{
26b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
27b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        typedef std::unordered_multimap<int, std::string> C;
28b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        typedef std::pair<int, std::string> P;
29b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        P a[] =
30b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        {
31b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(1, "one"),
32b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(2, "two"),
33b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(3, "three"),
34b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(4, "four"),
35b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(1, "four"),
36b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(2, "four"),
37b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        };
38b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        C c(a, a + sizeof(a)/sizeof(a[0]));
39b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        C::const_iterator i = c.find(2);
40b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        C::iterator j = c.erase(i);
41b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
42b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(c.size() == 5);
43b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        typedef std::pair<C::const_iterator, C::const_iterator> Eq;
44b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        Eq eq = c.equal_range(1);
45b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(std::distance(eq.first, eq.second) == 2);
46b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        C::const_iterator k = eq.first;
47b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(k->first == 1);
48b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(k->second == "one");
49b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        ++k;
50b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(k->first == 1);
51b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(k->second == "four");
52b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        eq = c.equal_range(2);
53b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(std::distance(eq.first, eq.second) == 1);
54b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        k = eq.first;
55b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(k->first == 2);
56b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(k->second == "four");
57b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        eq = c.equal_range(3);
58b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(std::distance(eq.first, eq.second) == 1);
59b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        k = eq.first;
60b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(k->first == 3);
61b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(k->second == "three");
62b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        eq = c.equal_range(4);
63b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(std::distance(eq.first, eq.second) == 1);
64b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        k = eq.first;
65b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(k->first == 4);
66b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(k->second == "four");
67b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(std::distance(c.begin(), c.end()) == c.size());
68b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(std::distance(c.cbegin(), c.cend()) == c.size());
69b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
70ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner#if __cplusplus >= 201103L
71ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    {
72ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        typedef std::unordered_multimap<int, std::string, std::hash<int>, std::equal_to<int>,
73ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner                            min_allocator<std::pair<const int, std::string>>> C;
74ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        typedef std::pair<int, std::string> P;
75ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        P a[] =
76ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        {
77ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(1, "one"),
78ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(2, "two"),
79ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(3, "three"),
80ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(4, "four"),
81ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(1, "four"),
82ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(2, "four"),
83ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        };
84ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        C c(a, a + sizeof(a)/sizeof(a[0]));
85ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        C::const_iterator i = c.find(2);
86ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        C::iterator j = c.erase(i);
87ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner
88ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(c.size() == 5);
89ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        typedef std::pair<C::const_iterator, C::const_iterator> Eq;
90ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        Eq eq = c.equal_range(1);
91ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(std::distance(eq.first, eq.second) == 2);
92ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        C::const_iterator k = eq.first;
93ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(k->first == 1);
94ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(k->second == "one");
95ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        ++k;
96ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(k->first == 1);
97ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(k->second == "four");
98ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        eq = c.equal_range(2);
99ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(std::distance(eq.first, eq.second) == 1);
100ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        k = eq.first;
101ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(k->first == 2);
102ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(k->second == "four");
103ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        eq = c.equal_range(3);
104ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(std::distance(eq.first, eq.second) == 1);
105ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        k = eq.first;
106ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(k->first == 3);
107ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(k->second == "three");
108ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        eq = c.equal_range(4);
109ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(std::distance(eq.first, eq.second) == 1);
110ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        k = eq.first;
111ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(k->first == 4);
112ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(k->second == "four");
113ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(std::distance(c.begin(), c.end()) == c.size());
114ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(std::distance(c.cbegin(), c.cend()) == c.size());
115ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    }
116ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner#endif
117b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner}
118