【数据结构】静态set

发布时间 2023-12-04 16:48:44作者: purinliang
template <class value_type>
struct const_set {
    vector<value_type> vec;
    int vec_sorted_len;


    void clear() {
        vec.clear();
        vec_sorted_len = 0;
    }

    void sort() {
        std::sort (vec.begin() + vec_sorted_len, vec.end());
        std::inplace_merge (vec.begin(), vec.begin() + vec_sorted_len, vec.end());
        vec_sorted_len = vec.size();
    }

    decltype (vec.begin()) find (const value_type & value) {
        auto it = lower_bound (vec.begin(), vec.begin() + vec_sorted_len, value);
        if (it == vec.begin() + vec_sorted_len || *it != value) {
            it = vec.end();
        }
        return it;
    }

    int count (const value_type & value) {
        auto it = find (value);
        if (it != vec.end()) {
            return 1;
        }
        return 0;
    }

    void insert (const value_type& value) {
        vec.push_back (value);
    }

};