79194380

Date: 2024-11-16 02:01:49
Score: 0.5
Natty:
Report link

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();
}
Reasons:
  • Long answer (-0.5):
  • Has code block (-0.5):
  • Unregistered user (0.5):
  • Low reputation (1):
Posted by: hikotakamura