implementation of std::set like skip list