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// pair<iterator, iterator> equal_range(const key_type& k);
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 C::iterator I;
29b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        typedef std::pair<int, std::string> P;
30b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        P a[] =
31b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        {
32b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(10, "ten"),
33b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(20, "twenty"),
34b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(30, "thirty"),
35b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(40, "fourty"),
36b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(50, "fifty"),
37b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(50, "fiftyA"),
38b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(50, "fiftyB"),
39b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(60, "sixty"),
40b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(70, "seventy"),
41b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(80, "eighty"),
42b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        };
43b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        C c(std::begin(a), std::end(a));
44b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        std::pair<I, I> r = c.equal_range(30);
45b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(std::distance(r.first, r.second) == 1);
46b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(r.first->first == 30);
47b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(r.first->second == "thirty");
48b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        r = c.equal_range(5);
49b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(std::distance(r.first, r.second) == 0);
50b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        r = c.equal_range(50);
51b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(r.first->first == 50);
52b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(r.first->second == "fifty");
53b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        ++r.first;
54b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(r.first->first == 50);
55b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(r.first->second == "fiftyA");
56b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        ++r.first;
57b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(r.first->first == 50);
58b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(r.first->second == "fiftyB");
59b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
60ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner#if __cplusplus >= 201103L
61ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    {
62ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        typedef std::unordered_multimap<int, std::string, std::hash<int>, std::equal_to<int>,
63ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner                            min_allocator<std::pair<const int, std::string>>> C;
64ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        typedef C::iterator I;
65ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        typedef std::pair<int, std::string> P;
66ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        P a[] =
67ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        {
68ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(10, "ten"),
69ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(20, "twenty"),
70ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(30, "thirty"),
71ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(40, "fourty"),
72ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(50, "fifty"),
73ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(50, "fiftyA"),
74ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(50, "fiftyB"),
75ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(60, "sixty"),
76ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(70, "seventy"),
77ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(80, "eighty"),
78ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        };
79ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        C c(std::begin(a), std::end(a));
80ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        std::pair<I, I> r = c.equal_range(30);
81ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(std::distance(r.first, r.second) == 1);
82ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(r.first->first == 30);
83ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(r.first->second == "thirty");
84ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        r = c.equal_range(5);
85ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(std::distance(r.first, r.second) == 0);
86ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        r = c.equal_range(50);
87ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(r.first->first == 50);
88ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(r.first->second == "fifty");
89ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        ++r.first;
90ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(r.first->first == 50);
91ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(r.first->second == "fiftyA");
92ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        ++r.first;
93ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(r.first->first == 50);
94ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(r.first->second == "fiftyB");
95ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    }
96ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner#endif
97b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner}
98