52 using std::map<L, size_t>::operator=;
61 void print(
const std::string&
s =
"Assignment: ",
62 const std::function<std::string(
L)>& labelFormatter =
64 std::cout <<
s <<
": ";
65 for (
const typename Assignment::value_type& keyValue : *
this) {
66 std::cout <<
"(" << labelFormatter(keyValue.first) <<
", "
67 << keyValue.second <<
")";
69 std::cout << std::endl;
73 return (*
this ==
other);
88 template <
typename AssignmentType = Assignment<L>>
90 const std::vector<std::pair<L, size_t>>&
keys) {
91 std::vector<AssignmentType> allPossValues;
92 AssignmentType assignment;
93 for (
const auto& [idx,
_] :
keys) assignment[idx] = 0;
97 allPossValues.push_back(assignment);
102 auto [idx, cardinality] =
keys[
j];
106 const bool carry = (assignment[idx] == cardinality);
114 return allPossValues;