如何从stl集中获取唯一的值对

zen*_*nna 4 c++ iterator stl set

我有一组整数,我想迭代所有唯一的整数值对,其中我认为val1,val2和val2,val1是唯一的,我应该只看到那个组合一次.

我在python中编写了这个,我使用列表的索引(簇):

for i in range(len(clusters) - 1):
    for j in range(i+1,len(clusters)):
       #Do something with clusters[i],clusters[j])
Run Code Online (Sandbox Code Playgroud)

但没有索引我不知道如何使用stl set和迭代器实现相同的功能.我试过了:

for (set<int>::iterator itr = myset.begin(); itr != myset.end()-1; ++itr) {
    cout << *itr;
}
Run Code Online (Sandbox Code Playgroud)

但由于迭代器没有 - 运算符,因此失败.

我怎样才能做到这一点,或者我必须使用不同的容器?

Gre*_*g S 8

以下几行中的内容如何:

for(set<int>::const_iterator iter1 = myset.begin(); iter1 != myset.end(); ++iter1) {
    for(set<int>::const_iterator iter2 = iter1; ++iter2 != myset.end();) {
    {
        std::cout << *iter1 << " " << *iter2 << "\n"; 
    }
}
Run Code Online (Sandbox Code Playgroud)

这会产生所有N*(N-1)/2唯一对,其中N是集合中的整数数.

顺便说一下:const_iterator无论何时迭代容器而不修改任何东西,都要使用a ,它的风格很好,可能有更好的性能.

编辑:修改代码以反映Steve Jessop提出的建议.