std::set::equal_range can return more than 1 element(s)!
For example:
#include <iostream>
#include <set>
using namespace std;
struct TRange
{
int s;
int e;
TRange(int start, int end) { s=start; e=end; }
bool operator<(const TRange &rhs) const { return e<=rhs.s; } // no overlap, == means overlap
};
int main()
{
set<TRange> set1;
TRange e0(10,15), e1(20,25), e2(30,35);
set1.insert(e0);
set1.insert(e1);
set1.insert(e2);
TRange x(12,32);
auto r=set1.equal_range(x);
int k=0;
for (auto it=r.first; it!=r.second; ++it) {
++k;
}
cout<<"Found "<<k<<" result(s) by set's equal_range."<<endl; // 3
getchar();
auto pr=set1.insert(x);
if (pr.second) {
cout<<"insert OK! set1.size()="<<set1.size()<<"."<<endl;
} else {
cout<<"insert Fail! set1.size()="<<set1.size()<<"."<<endl;
}
getchar();
}