Тема: Додавання map до tuple в stack
Намагаюся вирішити завдання:
40. Combination Sum II
Medium
Topics
Companies
Given a collection of candidate numbers (candidates) and a target number
(target), find all unique combinations in candidates where the candidate
numbers sum to target.
Each number in candidates may only be used once in the combination.
Note: The solution set must not contain duplicate combinations.
Example 1:
Input: candidates = [10,1,2,7,6,1,5], target = 8
Output:
[
[1,1,6],
[1,2,5],
[1,7],
[2,6]
]
Example 2:
Input: candidates = [2,5,2,1,2], target = 5
Output:
[
[1,2,2],
[5]
]
Constraints:
1 <= candidates.length <= 100
1 <= candidates[i] <= 50
1 <= target <= 30
Але ітеративним методом. Ось так:
class Solution {
public:
auto combinationSum2(const std::vector<int>& candidates, const int target)
-> std::vector<std::vector<int>>
{
std::vector<std::vector<int>> answer;
auto candidates_size = static_cast<int>(std::ranges::size(candidates));
std::stack<std::tuple<std::unordered_map<int, int>, std::vector<int>,
int, int>>
combs;
std::vector<int> helper;
std::unordered_map<int, int> helper_map;
combs.emplace(helper_map, helper, target, 0);
std::unordered_map<int, int> freq;
for (const auto& item : candidates) {
++freq[item];
}
while (!combs.empty()) {
auto [cur_freq, current, remaining, index]
= std::move(combs.top());
combs.pop();
if (remaining == 0) {
answer.emplace_back(current);
continue;
}
for (int i = index; i < candidates_size; ++i) {
++cur_freq[candidates[i]];
if (candidates[i] > remaining
|| cur_freq[candidates[i]] > freq[candidates[i]]) {
continue;
}
current.emplace_back(candidates[i]);
std::vector<int> next_combo(current);
combs.emplace(next_combo, remaining - candidates[i], i);
}
}
return answer;
}
};
Проте отримую ось таку помилку при додаванні map до т'юплу стека:
In file included from /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/complex:45:
In file included from /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/sstream:40:
In file included from /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/istream:40:
In file included from /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/ios:44:
In file included from /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/ios_base.h:41:
In file included from /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/locale_classes.h:40:
In file included from /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/string:54:
In file included from /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/basic_string.h:39:
In file included from /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/ext/alloc_traits.h:34:
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/alloc_traits.h:577:4: error: no matching function for call to 'construct_at'
577 | std::construct_at(__p, std::forward<_Args>(__args)...);
| ^~~~~~~~~~~~~~~~~
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/deque.tcc:170:21: note: in instantiation of function template specialization 'std::allocator_traits<std::allocator<std::tuple<std::unordered_map<int, int>, std::vector<int>, int, int>>>::construct<std::tuple<std::unordered_map<int, int>, std::vector<int>, int, int>, std::vector<int> &, int, int &>' requested here
170 | _Alloc_traits::construct(this->_M_impl,
| ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_stack.h:270:13: note: in instantiation of function template specialization 'std::deque<std::tuple<std::unordered_map<int, int>, std::vector<int>, int, int>>::emplace_back<std::vector<int> &, int, int &>' requested here
270 | { return c.emplace_back(std::forward<_Args>(__args)...); }
| ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h:94:5: note: candidate template ignored: substitution failure [with _Tp = std::tuple<std::unordered_map<int, int>, std::vector<int>, int, int>, _Args = <std::vector<int> &, int, int &>]: no matching constructor for initialization of 'std::tuple<std::unordered_map<int, int>, std::vector<int>, int, int>'
94 | construct_at(_Tp* __location, _Args&&... __args)
| ^
95 | noexcept(noexcept(::new((void*)0) _Tp(std::declval<_Args>()...)))
96 | -> decltype(::new((void*)0) _Tp(std::declval<_Args>()...))
| ~~~
1 error generated.
Розумію, що намагаюся впихнути невпихуєме, але ніяк не збагну причини невпихуємості:)
Наче мало б працювати.