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