summaryrefslogtreecommitdiffstats
path: root/library/cpp/containers
diff options
context:
space:
mode:
authorrobot-piglet <[email protected]>2026-01-15 21:35:25 +0300
committerrobot-piglet <[email protected]>2026-01-15 22:18:26 +0300
commita85eefc56f18859a643c4c99c6a6d86c7ffd1fdf (patch)
tree0e15e3bc7ea3f8a543211205f8690c43409dc8d6 /library/cpp/containers
parenta8b9e17093c6581a74c9c8b985b8c871056233f1 (diff)
Intermediate changes
commit_hash:9269fba6accab3db16a0bf72a8ca256583d95e72
Diffstat (limited to 'library/cpp/containers')
-rw-r--r--library/cpp/containers/ordered_map/ordered_map.h15
1 files changed, 14 insertions, 1 deletions
diff --git a/library/cpp/containers/ordered_map/ordered_map.h b/library/cpp/containers/ordered_map/ordered_map.h
index 801a526217f..22422901a84 100644
--- a/library/cpp/containers/ordered_map/ordered_map.h
+++ b/library/cpp/containers/ordered_map/ordered_map.h
@@ -14,6 +14,7 @@ namespace NOrderedMap {
struct TPairTraits {
using TValue = Value;
using Item = std::pair<const Key, Value>;
+ using StorageItem = Item;
using TMutableItem = std::pair<Key, Value>;
static const Key& GetSortProjector(const Item& x) {
@@ -29,6 +30,7 @@ namespace NOrderedMap {
template<class Key>
struct TSelfTraits {
using Item = const Key;
+ using StorageItem = Key;
using TMutableItem = Key;
using TValue = Item;
@@ -44,12 +46,13 @@ namespace NOrderedMap {
template <
class TKey,
class Traits,
- class BaseToUse = std::list<typename Traits::Item> //bases: deque or list
+ class BaseToUse = std::list<typename Traits::StorageItem> //bases: deque or list
>
class TOrderedMapImpl : protected BaseToUse {
using TBase = BaseToUse;
public:
+ using TTraits = Traits;
using typename TBase::const_iterator;
using typename TBase::iterator;
using typename TBase::reference;
@@ -62,6 +65,7 @@ namespace NOrderedMap {
using TBase::end;
using TBase::rbegin;
using TBase::rend;
+
operator bool() const {
return empty();
}
@@ -164,6 +168,11 @@ namespace NOrderedMap {
}
template <class... TArgs>
+ reference emplace(TArgs&&... args) {
+ return emplace_back(std::forward<TArgs>(args)...);
+ }
+
+ template <class... TArgs>
reference try_emplace_back(TArgs&&... args) {
auto& value = TBase::emplace_back(std::forward<TArgs>(args)...);
auto [mapIt, ok] = Map_.try_emplace(&Traits::GetSortProjector(value), --TBase::end());
@@ -276,5 +285,9 @@ namespace NOrderedMap {
template <class TKey>
class TOrderedSet : public TOrderedMapImpl<TKey, TSelfTraits<TKey>> {
+ public:
+ auto operator==(const TOrderedSet& b) const {
+ return std::lexicographical_compare_three_way(this->begin(), this->end(), b.begin(), b.end()) == std::strong_ordering::equal;
+ }
};
}