14 std::vector<std::pair<K, V>> elements;
17 struct needle_type_helper {
21 template<
typename CharT,
typename Traits,
typename Alloc>
22 struct needle_type_helper<std::basic_string<CharT, Traits, Alloc>> {
23 using type = std::basic_string_view<CharT, Traits>;
26 using needle_type =
typename needle_type_helper<K>::type;
30 using value_type = std::pair<K, V>;
31 using iterator =
typename std::vector<std::pair<K, V>>::iterator;
32 using const_iterator =
typename std::vector<std::pair<K, V>>::const_iterator;
33 using size_type =
typename std::vector<std::pair<K, V>>::size_type;
37 assoc_list(std::initializer_list<std::pair<K, V>> elements):
40 assoc_list(
const assoc_list& other):
41 elements(other.elements) {}
43 assoc_list(assoc_list&& other):
44 elements(std::move(other.elements)) {}
47 return elements.empty();
50 size_type size()
const {
51 return elements.size();
54 V& operator[](
const needle_type& key) {
55 for (
auto& [k, v]: elements) {
62 template<
typename ...ForwardArg>
63 iterator push_back(ForwardArg&& ...args) {
64 elements.push_back(std::make_pair(std::forward<ForwardArg>(args)...));
65 return elements.end();
68 iterator find(
const needle_type& key) {
69 auto end = elements.end();
70 for (
auto iter = elements.begin(); iter != end; ++iter) {
71 if (iter->first == key) {
78 const_iterator find(
const needle_type& key)
const {
79 auto end = elements.end();
80 for (
auto iter = elements.begin(); iter != end; ++iter) {
81 if (iter->first == key) {
89 bool contains(
const needle_type& key)
const {
90 auto end = elements.end();
91 for (
auto iter = elements.begin(); iter != end; ++iter) {
92 if (iter->first == key) {
99 const_iterator cfind(
const needle_type& key)
const {
100 auto end = elements.end();
101 for (
auto iter = elements.begin(); iter != end; ++iter) {
102 if (iter->first == key) {
110 return elements.begin();
114 return elements.end();
117 const_iterator begin()
const {
118 return elements.cbegin();
121 const_iterator end()
const {
122 return elements.cend();