14#ifndef OR_TOOLS_BASE_MAP_UTIL_H_
15#define OR_TOOLS_BASE_MAP_UTIL_H_
28template <
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()) {
43template <
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;
59template <
class Collection>
60const 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()) {
73template <
class Collection>
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()) {
88template <
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()) {
104template <
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;
121template <
class Collection>
123 const typename Collection::value_type&
value) {
124 std::pair<typename Collection::iterator, bool> ret =
125 collection->insert(
value);
133template <
class Collection,
class Key,
class Value>
136 std::pair<typename Collection::iterator, bool> ret =
137 collection->insert(
typename Collection::value_type(key,
value));
144template <
class Collection>
146 const typename Collection::value_type&
value) {
153template <
class Collection>
155 const typename Collection::value_type&
value) {
156 CHECK(collection->insert(
value).second) <<
"duplicate value: " <<
value;
161template <
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;
172template <
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;
184template <
class Collection,
class Key,
class Value>
185bool FindCopy(
const Collection& collection,
const Key& key,
187 typename Collection::const_iterator it = collection.find(key);
188 if (it == collection.end()) {
199template <
class Collection,
class Key>
201 typename Collection::const_iterator it = collection.find(key);
202 return it != collection.end();
205template <
class Collection>
206const 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;
215template <
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";
225template <
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";
236template <
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;
const Collection::value_type::second_type FindPtrOrNull(const Collection &collection, const typename Collection::value_type::first_type &key)
bool InsertOrUpdate(Collection *const collection, const Key &key, const Value &value)
void InsertOrDieNoPrint(Collection *const collection, const typename Collection::value_type &value)
bool InsertIfNotPresent(Collection *const collection, const typename Collection::value_type &value)
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)
void InsertOrDie(Collection *const collection, const typename Collection::value_type &value)
bool FindCopy(const Collection &collection, const Key &key, Value *const value)
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 & FindOrDieNoPrint(const Collection &collection, const typename Collection::value_type::first_type &key)
const Collection::value_type::second_type * FindOrNull(const Collection &collection, const typename Collection::value_type::first_type &key)
bool ContainsKey(const Collection &collection, const Key &key)
auto & InsertKeyOrDie(Collection *const collection, const typename Collection::value_type::first_type &key)
std::function< int64_t(const Model &)> Value(IntegerVariable v)