C++ 如何从stl集合中获取唯一的值对 我有一个整数的STL集,我想迭代所有唯一的整数值对,在这里,我认为Val1,Val2和Val2,Val1是相同的,我只应该看到一次组合。< /P>

C++ 如何从stl集合中获取唯一的值对 我有一个整数的STL集,我想迭代所有唯一的整数值对,在这里,我认为Val1,Val2和Val2,Val1是相同的,我只应该看到一次组合。< /P>,c++,stl,iterator,set,C++,Stl,Iterator,Set,我用python编写了这篇文章,其中使用了列表(集群)的索引: 但是如果没有索引,我不确定如何使用stl集和迭代器实现同样的效果。我试过: for (set<int>::iterator itr = myset.begin(); itr != myset.end()-1; ++itr) { cout << *itr; } for(set::iterator itr=myset.begin();itr!=myset.end()-1;++itr){ cout您不需要

我用python编写了这篇文章,其中使用了列表(集群)的索引:

但是如果没有索引,我不确定如何使用stl集和迭代器实现同样的效果。我试过:

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

cout您不需要执行
end()-1
,因为
end()
是一个迭代器,它指向容器中最后一个元素之后的

更正后的代码为:

for (set<int>::iterator itr = myset.begin(); itr != myset.end(); ++itr) {
    for (set<int>::iterator itr2 = itr + 1; itr2 != myset.end(); ++itr2) {
        // Do whatever you want with itr and itr2
    }
}
for(set::iterator itr=myset.begin();itr!=myset.end();++itr){
对于(set::iterator itr2=itr+1;itr2!=myset.end();++itr2){
//用itr和itr2做任何你想做的事
}
}

以下几点怎么样:

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"; 
    }
}
for(set::const_迭代器iter1=myset.begin();iter1!=myset.end();++iter1){
对于(set::const_迭代器iter2=iter1;++iter2!=myset.end();){
{

std::cout将数据放在boost::bimap中,然后进行双向迭代,将结果复制到标准STL映射中,这将强制唯一性。

尽管提问者在文本中没有这样说,但他的代码表明他不希望看到值相等的对。因此,可能需要替换
iter2!=myset.end();++iter2
with
++iter2!=myset.end();
很抱歉我误读了你说的话。我确实不想犯同样的错误:两个数字都是必需的,而且
itr2
过早开始一个数字。
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"; 
    }
}