24#ifndef TVM_SUPPORT_ORDERED_MAP_H_
25#define TVM_SUPPORT_ORDERED_MAP_H_
28#include <unordered_map>
44template <
typename K,
typename V,
typename Hash = std::hash<K>,
45 typename KeyEqual = std::equal_to<K>>
73 template <
typename Iter>
79 auto it = elem_to_index_.find(k);
80 if (it != elem_to_index_.end()) {
81 return elements_.begin() + it->second;
83 return elements_.end();
86 auto find(
const K& k)
const {
87 auto it = elem_to_index_.find(k);
88 if (it != elem_to_index_.end()) {
89 return elements_.begin() + it->second;
91 return elements_.end();
95 auto it = elem_to_index_.find(k);
96 if (it != elem_to_index_.end()) {
97 return elements_[it->second].second;
99 elements_.emplace_back(k, V());
100 elem_to_index_[k] = elements_.size() - 1;
101 return elements_.back().second;
105 auto it = elem_to_index_.find(k);
106 if (it != elem_to_index_.end()) {
107 elements_[it->second].second = std::move(v);
109 elements_.emplace_back(k, v);
110 elem_to_index_[k] = elements_.size() - 1;
116 elem_to_index_.clear();
119 size_t count(
const K& k)
const {
return elem_to_index_.count(k); }
121 auto begin()
const {
return elements_.begin(); }
122 auto end()
const {
return elements_.end(); }
123 auto begin() {
return elements_.begin(); }
124 auto end() {
return elements_.end(); }
126 size_t size()
const {
return elements_.size(); }
127 bool empty()
const {
return elements_.empty(); }
129 void reserve(
size_t n) { elem_to_index_.reserve(n); }
132 void InitElementToIter() {
133 for (
size_t i = 0; i < elements_.size(); i++) {
134 elem_to_index_[elements_[i].first] = i;
138 std::vector<std::pair<K, V>> elements_;
139 std::unordered_map<K, size_t, Hash, KeyEqual> elem_to_index_;
An STL-like map that preserves insertion order.
Definition ordered_map.h:46
V & operator[](const K &k)
Definition ordered_map.h:94
OrderedMap & operator=(OrderedMap< K, V, Hash, KeyEqual > &&)=default
OrderedMap & operator=(const OrderedMap< K, V, Hash, KeyEqual > &other)
Definition ordered_map.h:66
auto find(const K &k) const
Definition ordered_map.h:86
bool empty() const
Definition ordered_map.h:127
auto end()
Definition ordered_map.h:124
auto begin()
Definition ordered_map.h:123
void insert(const K &k, V v)
Definition ordered_map.h:104
OrderedMap(const OrderedMap< K, V, Hash, KeyEqual > &other)
Definition ordered_map.h:57
void reserve(size_t n)
Definition ordered_map.h:129
auto find(const K &k)
Definition ordered_map.h:78
OrderedMap(Iter begin, Iter end)
Definition ordered_map.h:74
auto begin() const
Definition ordered_map.h:121
size_t count(const K &k) const
Definition ordered_map.h:119
void clear()
Definition ordered_map.h:114
auto end() const
Definition ordered_map.h:122
OrderedMap(OrderedMap< K, V, Hash, KeyEqual > &&)=default
size_t size() const
Definition ordered_map.h:126
An object that builds and maintains block scope and StmtSref mapping for Dependence analysis.
Definition attr.h:23