如何迭代unordered_set中的无序对?

Uri*_*Uri 6 c++ unordered-set

什么是迭代无序对元素的简洁方法unordered_set

(所以顺序无关紧要,元素应该不同)

例如{1,2,3} =>(1,2)(2,3)(1,3)

我最初的尝试是类似的

for (i = 0; i < size - 1; i++) {
  for (j = i + 1; j < size; j++) {
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

但是对于迭代器来说这并不是非常方便.

orl*_*rlp 7

这应该有效,给出一个std::unordered_set s:

auto set_end = s.end();
for (auto ai = s.begin(); ai != set_end; ++ai) {
    for (auto bi = std::next(ai); bi != set_end; ++bi) {
        // *ai, *bi
    }
}
Run Code Online (Sandbox Code Playgroud)

这基本上是整数中等效于以下的迭代器:

for (int i = 0; i < n; ++i) {
    for (int j = i + 1; j < n; ++j) {
        // i, j
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @erip您的编辑是不必要的,性能较差,并且可能不正确,具体取决于重载/类型.要明白为什么,精神上做整数版:) (3认同)
  • @caps`std :: for_each`不提供迭代器,内部循环依赖于外部循环的迭代器. (2认同)