diff --git a/src/common/Containers/FlatSet.h b/src/common/Containers/FlatSet.h
new file mode 100644
index 00000000000..5602ba17254
--- /dev/null
+++ b/src/common/Containers/FlatSet.h
@@ -0,0 +1,105 @@
+/*
+ * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
+ *
+ * This program 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 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program 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 this program. If not, see .
+ */
+#ifndef TRINITYCORE_FLAT_SET_H
+#define TRINITYCORE_FLAT_SET_H
+
+#include
+#include
+
+namespace Trinity::Containers
+{
+template , class KeyContainer = std::vector>
+class FlatSet
+{
+public:
+ using iterator = typename KeyContainer::iterator;
+ using const_iterator = typename KeyContainer::const_iterator;
+
+ bool empty() const { return _storage.empty(); }
+ auto size() const { return _storage.size(); }
+
+ auto begin() { return _storage.begin(); }
+ auto begin() const { return _storage.begin(); }
+
+ auto end() { return _storage.end(); }
+ auto end() const { return _storage.end(); }
+
+ auto find(Key const& value) const
+ {
+ auto end = this->end();
+ auto itr = std::lower_bound(this->begin(), end, value, Compare());
+ if (itr != end && Compare()(value, *itr))
+ itr = end;
+
+ return itr;
+ }
+
+ auto find(Key const& value)
+ {
+ auto end = this->end();
+ auto itr = std::lower_bound(this->begin(), end, value, Compare());
+ if (itr != end && Compare()(value, *itr))
+ itr = end;
+
+ return itr;
+ }
+
+ template
+ std::pair emplace(Args&&... args)
+ {
+ Key newElement(std::forward(args)...);
+ auto end = this->end();
+ auto itr = std::lower_bound(this->begin(), end, newElement, Compare());
+ if (itr != end && !Compare()(newElement, *itr))
+ return { itr, false };
+
+ return { _storage.emplace(itr, std::move(newElement)), true };
+ }
+
+ std::pair insert(Key const& key) { return emplace(key); }
+
+ std::size_t erase(Key const& key)
+ {
+ auto itr = this->find(key);
+ if (itr == this->end())
+ return 0;
+
+ this->erase(itr);
+ return 1;
+ }
+ auto erase(const_iterator itr) { return _storage.erase(itr); }
+
+ void clear() { _storage.clear(); }
+
+ void shrink_to_fit() { _storage.shrink_to_fit(); }
+
+ friend bool operator==(FlatSet const& left, FlatSet const& right)
+ {
+ return left._storage == right._storage;
+ }
+
+ friend bool operator!=(FlatSet const& left, FlatSet const& right)
+ {
+ return !(left == right);
+ }
+
+private:
+ KeyContainer _storage;
+};
+}
+
+#endif // TRINITYCORE_FLAT_SET_H
diff --git a/src/server/game/Entities/Player/KillRewarder.cpp b/src/server/game/Entities/Player/KillRewarder.cpp
index e2acc7eb515..5f352fba290 100644
--- a/src/server/game/Entities/Player/KillRewarder.cpp
+++ b/src/server/game/Entities/Player/KillRewarder.cpp
@@ -18,6 +18,7 @@
#include "KillRewarder.h"
#include "Creature.h"
#include "DB2Stores.h"
+#include "FlatSet.h"
#include "Formulas.h"
#include "Group.h"
#include "Guild.h"
@@ -27,7 +28,6 @@
#include "Player.h"
#include "Scenario.h"
#include "SpellAuraEffects.h"
-#include
#include
// == KillRewarder ====================================================
@@ -259,7 +259,7 @@ void KillRewarder::_RewardGroup(Group const* group, Player const* killer)
void KillRewarder::Reward()
{
- boost::container::flat_set, boost::container::small_vector> processedGroups;
+ Trinity::Containers::FlatSet, boost::container::small_vector> processedGroups;
for (Player* killer : _killers)
{
_InitGroupData(killer);
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 380b1edc523..c15246784b2 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -20,12 +20,12 @@
#include "Object.h"
#include "CombatManager.h"
+#include "FlatSet.h"
#include "SpellAuraDefines.h"
#include "ThreatManager.h"
#include "Timer.h"
#include "UnitDefines.h"
#include "Util.h"
-#include
#include
#include