diff --git a/Kernel/include_std/set b/Kernel/include_std/set
new file mode 100644
index 00000000..1bc02ce7
--- /dev/null
+++ b/Kernel/include_std/set
@@ -0,0 +1,280 @@
+/*
+ This file is part of Fennix Kernel.
+
+ Fennix Kernel is free software: you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of
+ the License, or (at your option) any later version.
+
+ Fennix Kernel is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Fennix Kernel. If not, see .
+*/
+
+#pragma once
+
+#include
+#include
+#include
+#include
+
+namespace std
+{
+ template , class Allocator = std::allocator>
+ class multiset;
+
+ template , class Allocator = std::allocator>
+ class set
+ {
+ public:
+ template
+ struct __set_return_type
+ {
+ Iter position;
+ bool inserted;
+ NodeType node;
+ };
+
+ using key_type = Key;
+ using value_type = Key;
+ using size_type = std::size_t;
+ using difference_type = std::ptrdiff_t;
+ using key_compare = Compare;
+ using value_compare = Compare;
+ using allocator_type = Allocator;
+ using reference = value_type &;
+ using const_reference = const value_type &;
+ using pointer = std::allocator_traits::pointer;
+ using const_pointer = std::allocator_traits::const_pointer;
+ using iterator = value_type;
+ using const_iterator = const value_type;
+ using reverse_iterator = std::reverse_iterator;
+ using const_reverse_iterator = std::reverse_iterator;
+ using node_type = std::unique_ptr;
+ using insert_return_type = __set_return_type;
+
+ private:
+ public:
+#pragma region Constructors
+
+ set() : set(Compare()) {}
+
+ explicit set(const Compare &comp, const Allocator &alloc = Allocator());
+
+ explicit set(const Allocator &alloc);
+
+ template
+ set(InputIt first, InputIt last, const Compare &comp = Compare(), const Allocator &alloc = Allocator());
+
+ template
+ set(InputIt first, InputIt last, const Allocator &alloc) : set(first, last, Compare(), alloc) {}
+
+ set(const set &other);
+
+ set(const set &other, const Allocator &alloc);
+
+ set(set &&other);
+
+ set(set &&other, const Allocator &alloc);
+
+ set(std::initializer_list init, const Compare &comp = Compare(), const Allocator &alloc = Allocator());
+
+ set(std::initializer_list init, const Allocator &alloc) : set(init, Compare(), alloc) {}
+
+ ~set();
+
+#pragma endregion Constructors
+
+#pragma region Assignment
+
+ set &operator=(const set &other);
+
+ set &operator=(set &&other) noexcept(std::allocator_traits::is_always_equal::value && std::is_nothrow_move_assignable::value);
+
+ set &operator=(std::initializer_list ilist);
+
+ allocator_type get_allocator() const noexcept;
+
+#pragma endregion Assignment
+
+#pragma region Iterators
+
+ iterator begin() noexcept;
+
+ const_iterator begin() const noexcept;
+
+ const_iterator cbegin() const noexcept;
+
+ iterator end() noexcept;
+
+ const_iterator end() const noexcept;
+
+ const_iterator cend() const noexcept;
+
+ reverse_iterator rbegin() noexcept;
+
+ const_reverse_iterator rbegin() const noexcept;
+
+ const_reverse_iterator crbegin() const noexcept;
+
+ reverse_iterator rend() noexcept;
+
+ const_reverse_iterator rend() const noexcept;
+
+ const_reverse_iterator crend() const noexcept;
+
+#pragma endregion Iterators
+
+#pragma region Capacity
+
+ bool empty() const noexcept;
+
+ size_type size() const noexcept;
+
+ size_type max_size() const noexcept;
+
+#pragma endregion Capacity
+
+#pragma region Modifiers
+
+ void clear() noexcept;
+
+ std::pair insert(const value_type &value);
+
+ std::pair insert(value_type &&value);
+
+ iterator insert(const_iterator pos, const value_type &value);
+
+ iterator insert(const_iterator pos, value_type &&value);
+
+ template
+ void insert(InputIt first, InputIt last);
+
+ void insert(std::initializer_list ilist);
+
+ insert_return_type insert(node_type &&nh);
+
+ iterator insert(const_iterator pos, node_type &&nh);
+
+ template
+ std::pair emplace(Args &&...args);
+
+ template
+ iterator emplace_hint(const_iterator hint, Args &&...args);
+
+ iterator erase(const_iterator pos);
+
+ iterator erase(const_iterator first, const_iterator last);
+
+ size_type erase(const Key &key);
+
+ void swap(set &other) noexcept(std::allocator_traits::is_always_equal::value && std::is_nothrow_swappable::value);
+
+ node_type extract(const_iterator position);
+
+ node_type extract(const Key &k);
+
+ template
+ void merge(std::set &source);
+
+ template
+ void merge(std::set &&source);
+
+ template
+ void merge(std::multiset &source);
+
+ template
+ void merge(std::multiset &&source);
+
+#pragma endregion Modifiers
+
+#pragma region Lookup
+
+ size_type count(const Key &key) const;
+
+ template
+ size_type count(const K &x) const;
+
+ iterator find(const Key &key);
+
+ const_iterator find(const Key &key) const;
+
+ template
+ iterator find(const K &x);
+
+ template
+ const_iterator find(const K &x) const;
+
+ bool contains(const Key &key) const;
+
+ template
+ bool contains(const K &x) const;
+
+ std::pair equal_range(const Key &key);
+
+ std::pair equal_range(const Key &key) const;
+
+ template
+ std::pair equal_range(const K &x);
+
+ template
+ std::pair equal_range(const K &x) const;
+
+ iterator lower_bound(const Key &key);
+
+ const_iterator lower_bound(const Key &key) const;
+
+ template
+ iterator lower_bound(const K &x);
+
+ template
+ const_iterator lower_bound(const K &x) const;
+
+ iterator upper_bound(const Key &key);
+
+ const_iterator upper_bound(const Key &key) const;
+
+ template
+ iterator upper_bound(const K &x);
+
+ template
+ const_iterator upper_bound(const K &x) const;
+
+#pragma endregion Lookup
+
+#pragma region Observers
+
+ key_compare key_comp() const;
+
+ set::value_compare value_comp() const;
+
+#pragma endregion Observers
+ };
+
+ template
+ bool operator==(const std::set &lhs, const std::set &rhs);
+
+ // template
+ // std::strong_ordering operator<=>(const std::set &lhs, const std::set &rhs);
+
+ template
+ void swap(std::set &lhs, std::set &rhs) noexcept(noexcept(lhs.swap(rhs)));
+
+ template
+ std::set::size_type erase_if(std::set &c, Pred pred)
+ {
+ auto old_size = c.size();
+ for (auto first = c.begin(), last = c.end(); first != last;)
+ {
+ if (pred(*first))
+ first = c.erase(first);
+ else
+ ++first;
+ }
+ return old_size - c.size();
+ }
+}