1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant// The LLVM Compiler Infrastructure 4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// <map> 11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// class map 13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// mapped_type& operator[](const key_type& k); 15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <map> 17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert> 18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 19061d0cc4db18d17bf01ed14c5db0be098205bd47Marshall Clow#include "min_allocator.h" 205cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow#include "private_constructor.hpp" 2170342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant 22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main() 23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 2470342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant { 25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef std::pair<const int, double> V; 26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V ar[] = 27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(1, 1.5), 29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(2, 2.5), 30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(3, 3.5), 31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(4, 4.5), 32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(5, 5.5), 33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(7, 7.5), 34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V(8, 8.5), 35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant }; 36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::map<int, double> m(ar, ar+sizeof(ar)/sizeof(ar[0])); 37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(m.size() == 7); 38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(m[1] == 1.5); 39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(m.size() == 7); 40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant m[1] = -1.5; 41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(m[1] == -1.5); 42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(m.size() == 7); 43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(m[6] == 0); 44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(m.size() == 8); 45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant m[6] = 6.5; 46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(m[6] == 6.5); 47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(m.size() == 8); 4870342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant } 4970342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant#if __cplusplus >= 201103L 5070342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant { 5170342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant typedef std::pair<const int, double> V; 5270342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant V ar[] = 5370342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant { 5470342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant V(1, 1.5), 5570342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant V(2, 2.5), 5670342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant V(3, 3.5), 5770342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant V(4, 4.5), 5870342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant V(5, 5.5), 5970342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant V(7, 7.5), 6070342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant V(8, 8.5), 6170342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant }; 6270342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant std::map<int, double, std::less<int>, min_allocator<V>> m(ar, ar+sizeof(ar)/sizeof(ar[0])); 6370342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(m.size() == 7); 6470342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(m[1] == 1.5); 6570342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(m.size() == 7); 6670342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant const int i = 1; 6770342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant m[i] = -1.5; 6870342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(m[1] == -1.5); 6970342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(m.size() == 7); 7070342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(m[6] == 0); 7170342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(m.size() == 8); 7270342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant m[6] = 6.5; 7370342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(m[6] == 6.5); 7470342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(m.size() == 8); 7570342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant } 7670342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant#endif 775cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow#if _LIBCPP_STD_VER > 11 785cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow { 795cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow typedef std::pair<const int, double> V; 805cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow V ar[] = 815cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow { 825cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow V(1, 1.5), 835cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow V(2, 2.5), 845cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow V(3, 3.5), 855cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow V(4, 4.5), 865cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow V(5, 5.5), 875cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow V(7, 7.5), 885cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow V(8, 8.5), 895cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow }; 905cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow std::map<int, double, std::less<>> m(ar, ar+sizeof(ar)/sizeof(ar[0])); 915cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow 925cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow assert(m.size() == 7); 935cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow assert(m[1] == 1.5); 945cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow assert(m.size() == 7); 955cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow m[1] = -1.5; 965cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow assert(m[1] == -1.5); 975cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow assert(m.size() == 7); 985cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow assert(m[6] == 0); 995cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow assert(m.size() == 8); 1005cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow m[6] = 6.5; 1015cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow assert(m[6] == 6.5); 1025cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow assert(m.size() == 8); 1035cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow } 1045cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow#endif 105bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 106