我收到了错误
error: call to implicitly-deleted default constructor of '__compressed_pair_elem<(lambda at
main.cpp:181:16), 1>': _Base1(std::forward<_Tp>(__t)), _Base2() {}
Run Code Online (Sandbox Code Playgroud)
使用以下代码.我犯的错是什么,我也无法理解错误.
using namespace std;
auto my_hash = [](vector<int> const& vec){
size_t seed = vec.size();
for(auto& i : vec) {
seed ^= i + 0x9e3779b9 + (seed << 6) + (seed >> 2);
}
return seed;
};
using MySet = unordered_set<vector<int>, decltype(my_hash)>;
int main() {
vector<int> a{1,2,3};
MySet s;
return 0;
}
Run Code Online (Sandbox Code Playgroud) 当我尝试在迭代其元素时更新集合时,它的行为应该是什么?
我在各种场景中尝试过它并且它不会迭代迭代开始后添加的元素以及迭代期间删除的元素.如果我在迭代期间删除并放回任何元素,则会考虑该元素.什么是确切的行为,它是如何工作的?
这将打印字符串的所有排列:
def permutations(s):
ans = []
def helper(created, remaining):
if len(created) == len(s):
ans.append(''.join(created))
return
for ch in remaining:
remaining.remove(ch)
created.append(ch)
helper(created, remaining)
remaining.add(ch)
created.pop()
helper([], set(s))
return ans
Run Code Online (Sandbox Code Playgroud)
这里的行为是不可预测的,有时e是打印的,有时则不是:
ab = set(['b','c','d'])
x = True
for ch in ab:
if x:
ab.remove('c')
ab.add('e')
x = False
print(ch)
Run Code Online (Sandbox Code Playgroud)
在这里,我总是'c'只看到一次.即使第一个字符是'c':
ab = set(['b','c','d'])
x = True
for ch in ab:
if x:
ab.remove('c')
ab.add('c')
x = False
print(ch)
Run Code Online (Sandbox Code Playgroud)
以及实现上述功能相同目标的另一种方法:
def permwdups(s):
ans = …Run Code Online (Sandbox Code Playgroud) 要删除列表的第i个元素,我目前遵循以下语法:
std::list<int> remaining{1,2,3,4,5};
auto it = remaining.begin();
advance(it, i);
remaining.erase(it);
Run Code Online (Sandbox Code Playgroud)
是否有一种不那么冗长的方法来实现这一目标?同样,对于插入,以下是我遵循的语法.它也可以不那么冗长吗?
it = remaining.begin();
advance(it, i);
remaining.insert(it, el);
Run Code Online (Sandbox Code Playgroud)