14 #ifndef OR_TOOLS_BASE_MAP_UTIL_H_ 15 #define OR_TOOLS_BASE_MAP_UTIL_H_ 28 template <
class Collection>
30 const Collection& collection,
31 const typename Collection::value_type::first_type& key,
32 const typename Collection::value_type::second_type&
value) {
33 typename Collection::const_iterator it = collection.find(key);
34 if (it == collection.end()) {
43 template <
class Collection>
45 const Collection& collection,
46 const typename Collection::value_type::first_type& key) {
47 static const typename Collection::value_type::second_type*
const 48 default_value =
new typename Collection::value_type::second_type{};
49 typename Collection::const_iterator it = collection.find(key);
50 if (it == collection.end()) {
51 return *default_value;
59 template <
class Collection>
60 const typename Collection::value_type::second_type*
FindOrNull(
61 const Collection& collection,
62 const typename Collection::value_type::first_type& key) {
63 typename Collection::const_iterator it = collection.find(key);
64 if (it == collection.end()) {
73 template <
class Collection>
74 typename Collection::value_type::second_type*
FindOrNull(
75 Collection& collection,
76 const typename Collection::value_type::first_type& key) {
77 typename Collection::iterator it = collection.find(key);
78 if (it == collection.end()) {
88 template <
class Collection>
90 const Collection& collection,
91 const typename Collection::value_type::first_type& key) {
92 typename Collection::const_iterator it = collection.find(key);
93 if (it == collection.end()) {
104 template <
class Collection,
class Key,
class Value>
107 std::pair<typename Collection::iterator, bool> ret =
108 collection->insert(
typename Collection::value_type(key,
value));
111 ret.first->second =
value;
121 template <
class Collection>
123 const typename Collection::value_type&
value) {
124 std::pair<typename Collection::iterator, bool> ret =
125 collection->insert(
value);
133 template <
class Collection,
class Key,
class Value>
136 std::pair<typename Collection::iterator, bool> ret =
137 collection->insert(
typename Collection::value_type(key,
value));
144 template <
class Collection>
146 const typename Collection::value_type&
value) {
153 template <
class Collection>
155 const typename Collection::value_type&
value) {
156 CHECK(collection->insert(
value).second) <<
"duplicate value: " <<
value;
161 template <
class Collection>
163 const typename Collection::value_type::first_type& key,
164 const typename Collection::value_type::second_type& data) {
165 typedef typename Collection::value_type value_type;
166 CHECK(collection->insert(value_type(key, data)).second)
167 <<
"duplicate key: " << key;
172 template <
typename Collection>
174 const typename Collection::value_type::first_type& key) {
175 auto [it, did_insert] = collection->insert(
typename Collection::value_type(
176 key,
typename Collection::value_type::second_type()));
177 CHECK(did_insert) <<
"duplicate key " << key;
184 template <
class Collection,
class Key,
class Value>
185 bool FindCopy(
const Collection& collection,
const Key& key,
187 typename Collection::const_iterator it = collection.find(key);
188 if (it == collection.end()) {
199 template <
class Collection,
class Key>
201 typename Collection::const_iterator it = collection.find(key);
202 return it != collection.end();
205 template <
class Collection>
206 const typename Collection::value_type::second_type&
FindOrDie(
207 const Collection& collection,
208 const typename Collection::value_type::first_type& key) {
209 typename Collection::const_iterator it = collection.find(key);
210 CHECK(it != collection.end()) <<
"Map key not found: " << key;
215 template <
class Collection>
217 const Collection& collection,
218 const typename Collection::value_type::first_type& key) {
219 typename Collection::const_iterator it = collection.find(key);
220 CHECK(it != collection.end()) <<
"Map key not found";
225 template <
class Collection>
227 Collection& collection,
228 const typename Collection::value_type::first_type& key) {
229 typename Collection::iterator it = collection.find(key);
230 CHECK(it != collection.end()) <<
"Map key not found";
236 template <
class Collection>
238 Collection*
const collection,
239 const typename Collection::value_type::first_type& key,
240 const typename Collection::value_type::second_type&
value) {
241 std::pair<typename Collection::iterator, bool> ret =
242 collection->insert(
typename Collection::value_type(key,
value));
243 return ret.first->second;
246 #endif // OR_TOOLS_BASE_MAP_UTIL_H_
const Collection::value_type::second_type & FindOrDieNoPrint(const Collection &collection, const typename Collection::value_type::first_type &key)
bool InsertIfNotPresent(Collection *const collection, const typename Collection::value_type &value)
bool FindCopy(const Collection &collection, const Key &key, Value *const value)
void InsertOrDie(Collection *const collection, const typename Collection::value_type &value)
auto & InsertKeyOrDie(Collection *const collection, const typename Collection::value_type::first_type &key)
const Collection::value_type::second_type FindPtrOrNull(const Collection &collection, const typename Collection::value_type::first_type &key)
std::function< int64_t(const Model &)> Value(IntegerVariable v)
void InsertOrDieNoPrint(Collection *const collection, const typename Collection::value_type &value)
bool ContainsKey(const Collection &collection, const Key &key)
const Collection::value_type::second_type & FindOrDie(const Collection &collection, const typename Collection::value_type::first_type &key)
const Collection::value_type::second_type & FindWithDefault(const Collection &collection, const typename Collection::value_type::first_type &key, const typename Collection::value_type::second_type &value)
const Collection::value_type::second_type * FindOrNull(const Collection &collection, const typename Collection::value_type::first_type &key)
Collection::value_type::second_type & LookupOrInsert(Collection *const collection, const typename Collection::value_type::first_type &key, const typename Collection::value_type::second_type &value)
bool InsertOrUpdate(Collection *const collection, const Key &key, const Value &value)