Search code examples
c++iteratorc++03c++98stdset

Go through all triple of different values contained in a std::set?


Suppose I have a sorted vector without duplicated values. If I want to go through all the triples of different values, I do this:

for(std::size_t i = 0; i < data.size(); ++i)
  for(std::size_t j = i+1; j < data.size(); ++j)
    for(std::size_t k = j+1; k < data.size(); ++k)
      do_somthing_with(data[i],data[j],data[k]);

How can I do that with iterators if my container is a std::set ?

Note: I don't use C++11 for compatibility reasons.


Solution

  • You can do pretty much the same as with the vector, but you'll need to create a wrapper function, that will copy and increment set iterator:

    std::set<int>::const_iterator next_iterator(std::set<int>::const_iterator it)
    {
      return ++it; // it has been passed by value, so already copied
    }
    
    //...
    
    for (std::set<int>::const_iterator it = data.begin(); it != data.end(); ++it)
      for(std::set<int>::const_iterator jt = next_iterator(it); jt != data.end(); ++jt)
        for(std::set<int>::const_iterator kt = next_iterator(jt); kt != data.end(); ++kt)
           // ...