    #include <unordered_set>
    #include <iostream>
    #include <string>
    #include <list>
     
    struct Interval {
        unsigned int b;
        unsigned int e;
        bool updated;
        int patternIndex;
        int proteinIndex;
        std::string getID() const { return std::to_string(b) + " " + std::to_string(e) + " " + std::to_string(proteinIndex); }
    };
     
    int main() {
        auto hash = [](const Interval& i){ return std::hash<std::string>()(i.getID()); };
        auto equal = [](const Interval& i1, const Interval& i2){ return i1.getID() == i2.getID(); };
        std::unordered_set<Interval, decltype(hash), decltype(equal)> test(8, hash, equal);
     
        std::list<Interval> concat { {1, 2, false, 3, 4}, {2, 3, false, 4, 5}, {1, 2, true, 7, 4}};
     
        for (auto const &i : concat)
            test.insert(i);
     
        for (auto const &i : test)
            std::cout << i.b << ", " << i.e << ", " << i.updated << std::endl;
     
    	return 0;
    }